为了辨析它们的差别,写了如下代码:
1 class C: 2 3 def self_method(self, a): 4 return a 5 6 @classmethod 7 def class_method(cls, a): 8 return a 9 10 @staticmethod 11 def static_method(a): 12 return a 13 14 def method(a): 15 return a 16 17 if __name__ == ‘__main__‘: 18 c = C() 19 print(c.self_method(‘self method‘)) 20 print(c.class_method(‘class method‘)) 21 print(c.static_method(‘static method‘)) 22 # print(c.method(‘method‘)) 运行出错 23 # print(C.self_method(‘self method‘)) 运行出错 24 print(C.class_method(‘class method‘)) 25 print(C.static_method(‘static method‘)) 26 print(C.method(‘method‘))
因此:
- 实例方法定义时第一个参数为类的一个实例(self),调用时必须通过实例调用。可以访问实例属性和方法。
- 类方法使用@classmethod装饰,第一个参数为类(cls),调用时可以通过类的实例或者类本身来调用。可以访问类属性和方法。
- 静态方法使用@staticmethod装饰,调用时可以使用类的实例或者类本身来调用。
- 普通方法其实是在类中定义了一个普通函数,调用时必须通过类本身来调用。
原文地址:https://www.cnblogs.com/lyg-blog/p/8761299.html
时间: 2024-10-12 01:11:39