普通方法(simple)类方法(classmethod)静态方法(staticmethod)的区别只需要抓住这一点
他们都写在class类内.
class A:
def f(self, x):
pass
@classmethod
def f(cls, x):
pass
@staticmethod
def f(x): pass
a = A()
simple | classmethod | staticmethod |
---|---|---|
def f(self, x): | def f(cls, x): | def f(x): |
self绑定实例a | cls绑定类A | 不绑定实例,也不绑定类 |
所以他们唯一的区别是函数的第一个参数绑定的对象不一样:
普通方法(simple) def f(self, x): 的第一个参数 self 绑定的对象是实例对象 a, 第二个参数是 x ;
类方法(classmethod) def f(cls, x): 的第一个参数 cls 绑定的对象是类 A , 第二个参数是 x ;
静态方法(staticmethod) def f(x): 的第一个参数就是传参 x 自己.
补充说明
类方法 @classmethod
1.类方法只能访问'类变量'的方法
2.类方法需要使用@classmethod装饰器定义
3.类方法的第一个参数是类实例,约定写为cls
说明:类(实例)和对象(实例)都可以调用类方法 类方法不能访问实例变量
静态方法:@staticmethod
1.静态方法是普通函数,静态方法定义在类的内部,只能凭借该类或实例调用
2.静态方法需要使用@staticmethod装饰器定义
3.静态方法写普通函数定义相同,不需要传入self和cls 参数
说明:类和实例都可以调用静态方法 静态方法不能访问类变量和实例变量