类的声明
def functionName(args):
'函数文档字符串'
函数体
class Person: #定义一个人类
role = 'person' #人的角色属性都是人
def walk(self): #人都可以走路,也就是有一个走路方法,也叫动态属性
print("person is walking...")
类的作用
属性引用
实例化:类名加括号就是实例化,会自动触发__init__函数的运行,
可以用它来为每个实例定制自己的特征
class Person: #定义一个人类
role = 'person' #人的角色属性都是人
def __init__(self,name):
self.name = name # 每一个角色都有自己的昵称;
def walk(self): #人都可以走路,也就是有一个走路方法
print("person is walking...")
print(Person.role) #查看人的role属性
print(Person.walk) #引用人的走路方法,注意,这里不是在调用
关于 self
self: 在实例化时自动将对象 / 实例本身传给__init__的第一个参数,你也可以给他起个别的名字,
但是一般不要这么做.
类属性
一:我们定义的类的属性到底存到哪里了?有两种方式查看
dir(类名):查出的是一个名字列表
类名.__dict__: 查出的是一个字典,key 为属性名,value 为属性值
二:特殊的类属性
类名.__name__# 类的名字 (字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类 (在讲继承时会讲)
类名.__bases__# 类所有父类构成的元组 (在讲继承时会讲)
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类 (仅新式类中)
类命名空间与对象,实例的命名空间
创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性
而类有两种属性:静态属性和动态属性
静态属性就是直接在类中定义的变量
动态属性就是定义在类中的方法
其中类的数据属性是共享给所有对象的
而类的动态属性是绑定到所有对象的
面向对象的组合
软件重用的重要方式除了继承之外还有另外一种方式,即:组合
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合
class Weapon:
def prick(self, obj): # 这是该装备的主动技能,扎死对方
obj.life_value -= 500 # 假设攻击力是500
class Person: # 定义一个人类
role = 'person' # 人的角色属性都是人
def __init__(self, name):
self.name = name # 每一个角色都有自己的昵称;
self.weapon = Weapon() # 给角色绑定一个武器;
egg = Person('egon')
egg.weapon.prick()
#egg组合了一个武器的对象,可以直接egg.weapon来使用组合类中的所有方法
当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
来源: http://www.bubuko.com/infodetail-2470374.html