之前就一直想分析下@staticmethod@classmethod和实例方法self的区别,今天终于准备分析下了:
举个例子:
class A(object):
def m1(self, n):
print("self:", self)
@classmethod
def m2(cls, n):
print("cls:", cls)
@staticmethod
def m3(n):
pass
a = A()
a.m1(1) # self: <__main__.A object at 0x000001E596E41A90>
A.m2(1) # cls: <class '__main__.A'>
A.m3(1)
这里记录下自己的简单理解,具体的理解可以看这边博客https://zhuanlan.zhihu.com/p/28010894
(1)对于实例化的方法,首先必须要创建一个类的实例,然后使用创建的实例调用类的方法,
(2)@classmethod方式是类方法,也就是类具备的方法他都可以直接调用,在方便面的程度上,感觉还是类方法比较方便,因为这里不需要进行实例化,可以直接调用方法。
(3)@staticmethod的方法属于定义了一个局部域函数为该类专门服务,其实也可以定义在类外供所有对象使用