普通方法(simple)类方法(classmethod)静态方法(staticmethod)的区别

普通方法(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 参数

说明:类和实例都可以调用静态方法 静态方法不能访问类变量和实例变量

你可能感兴趣的:(普通方法(simple)类方法(classmethod)静态方法(staticmethod)的区别)