面向对象之静态方法
静态方法:很类似类方法
1.需要装饰器@staticmethod
2.静态方法是无需传递参数(如,cls,self)
3.静态方法里面也只能访问类的属性和方法,而对象的是无法访问的(即,用self.xx访问属性和访问方法是不可以的)
4.加载时机同类方法,即在对象还没有创建时,就已经加载了
class Person: # 类的私有属性 __age = 18 @classmethod def update_age(cls): cls.__age = 20 print('----->类方法') @classmethod def show_age(cls): print('修改后的年龄是:', cls.__age) @staticmethod def test(): print('------>静态方法') print(Person.__age) Person.update_age() Person.show_age() Person.test()
总结:
比较类方法和静态方法
不同点:
1.装饰器不同
2.类方法是有参数的,而静态方法没有参数
相同点:
1.只能访问类的属性和方法,对象的是无法访问的
2.都可以通过类名调用访问
3.都可以在创建对象之前使用,因为是不依赖于对象的
普通方法与类方法,静态方法的区别
1.普通方法没有装饰器
2.普通方法永远要依赖对象,因为每个普通方法都有一个self(因此只有对象创建了,才能调用普通方法)
class Spam(object): numInstances = 0 @staticmethod def count(): Spam.numInstances += 1 def __init__(self): self.count() class Sub(Spam): numInstances = 0 class Other(Spam): numInstances = 0 x = Spam() y1, y2 = Sub(), Sub() z1, z2, z3 = Other(), Other(), Other() # 对象调用 print(x.numInstances, y1.numInstances, z1.numInstances) # 类调用 print(Spam.numInstances, Sub.numInstances, Other.numInstances)