一. 类属性
1. 类属性
类属性就是 类 所拥有的属性,它被 该类的所有实例对象 所共有。
类属性可以使用 类或 实例对象访问。
说明:
1. 记录的某项数据 始终保持一致时,则定义类属性。
2. 实例属性要求 每个对象为其 单独开辟一份内存空间 来记录数据,而 类属性 为全类所共有 ,仅占用一份内存,更加节省内存空间。
2. 类属性的设置
classDog(object):
tooth= 10dog=Dog()print(Dog.tooth) #类直接调用
print(dog.tooth) #实例调用
说明:
类属性类似于java的静态变量
3. 类属性的修改
类属性的修改只能通过类修改,不能通过类的实例对象修改
classDog(object):
tooth= 10dog=Dog()
Dog.tooth= 20
print(Dog.tooth) #20
print(dog.tooth) #20
dog.tooth= 30
print(Dog.tooth) #20
print(dog.tooth) #30
说明:
上面 dog.tooth = 30 并没有修改类属性tooth,而是创建了一个与类属性tooth同名的实例属性
二. 类方法
用装饰器`@classmethod`来标识的方法为类方法,对于类方法,第一个参数必须是类,一般以`cls`作为第一个参数。
classDog(object):
tooth= 10@classmethoddefclass_fn(cls):returncls.tooth
dog=Dog()print(Dog.class_fn()) #10 # 类直接调用类方法
print(dog.class_fn()) #10 # 类的对象调用类方法
说明:参数cls代表当前类,调用方法时自动传入
三. 静态方法
通过装饰器`@staticmethod`来进行修饰,静态方法既不需要传递类也不需要传递实例对象作为参数(形参没有self/cls)**。
静态方法 也能够通过 实例对象 和 类去访问。
classDog(object):
tooth= 10@staticmethoddefstatic_fn():return "静态方法"dog=Dog()print(Dog.static_fn()) #静态方法 # 类直接调用静态方法
print(dog.static_fn()) #静态方法 # 类的对象调用静态方法
说明:
静态对象中无法访问类属性