类变量
类变量是类的属性,此属性属于类,不属于此类的实例
作用:
通常用来存储该类创建的对象的共有属性
说明:
类变量可以通过该类直接访问
类变量可以通过类的实例直接访问
类变量可以通过此类的对象的__class__属性间接访问
类的文档字符串
类内第一个没有赋值给任何变量的字符串为类的文档字符串
类的文档字符串可以用类的 __doc__属性访问
>>> help(Dog) # 查看文档字符串
print(Dog.__doc__) # 类的__doc__属性用来绑定文档字符串
类的 __slots__ 列表
作用:
限定一个类创建的实例只能有固定的属性(实例变量)
不允许对象添加列表以外的属性(实例变量)
防止用户因错写属性的名称而发生程序错误
说明:
1. __slots__列表绑定一个字符串列表
2. 含有__slots__列表的类所创建 的实例对象没有__dict__属性,即此实例不用字典来存储对象的属性(实例变量)
示例:
# 此示例示意 类内的__slots__列表的用法? class Human: # 以下列表限制此类的对象只能有'name' 和'age' 属性 __slots__ = ['name', 'age'] def __init__(self, name, age): self.name, self.age = name, age h1 = Human("Tarena", 15) print(h1.age) # 15 # h1.Age = 18 # 出错,h1对象没有Age属性,也不允许有Age属性 print(h1.age) # 15
类方法 @classmethod
类方法是用于描述类的行为的方法,类方法属于类,不属于类的实例
说明:
类方法需要使用@classmethod装饰器定义
类方法至少有一个形参,第一个形参用于绑定类,约定写为'cls'
类和该类的实例都可以调用类方法
类方法不能访问此类创建的实例的属性
示例:
# 此示例示意类方法的使用 class A: v = 0 @classmethod def get_v(cls): # cls 用来绑定调用此方法的类 return cls.v # 访问类变量 @classmethod def set_v(cls, value): cls.v = value print(A.get_v()) # 0 A.set_v(100) print(A.get_v()) # 100 a1 = A() # 创建实例 print("a1.get_v() =", a1.get_v()) # 100 a1.set_v(200) print("a1.get_v() =", a1.get_v()) # 200 print('A.get_v() =', A.get_v())
静态方法 @staticmethod
静态方法是定义在类内部的函数,此函数的作用域是类的内部
说明:
静态方法需要使用 @staticmethod装饰器定义
静态方法与普通函数定义相同,不需要传入self实例参数和cls参数
静态方法只能凭借该类或类创建的实例调用
静态方法不能访问类变量和实例变量(属性)示例:
#该示例示意静态方法 class A: @staticmethod def myadd(a,b): return a + b print(A.myadd(100, 200)) # 300 a = A() # 创建实例 print(a.myadd(300, 400)) # 700