面向对象之静态方法
静态方法:很类似类方法
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)


浙公网安备 33010602011771号