今天看代码偶然看到这两者,
@staticmethod顾名思义,静态方法,这个在java里用的很多哈,给某个类定义一个带static的方法,就可以直接用类名而不是对象去调用。
但其实python里面不存在这个问题,我们调用python 的类里的方法,通常是可以用类名+方法来调用的。
想了想可以用来做一些环境变量的变化,比如收到某消息后,需要改变写文件的路径,或者需要一些类中的常量,可以用静态方法,这样就可以对所有实例子生效了
@classmethod是类方法,传一个cls和普通方法传一个self其实区别不大,只是classmethod支持类名的直接调用而不用生成实例。举个例子
class A(object):
def foo(self, x):
print('self:', self)
@classmethod
def class_foo(cls, x):
print('cls:', cls)
a = A
a.foo(1)没问题,但A.foo(1)会报错,因为A本身不是个对象,不能作为self存在。
但不管A.class_foo(1),还是a.class_foo(1)都不会报错,a会将自己的类作为参数传递给class_foo。因此@classmethod对类的修改并不是固化的。具体可以用来做什么呢?
查了点资料,可以做可选的构造函数来使用
看这个问题答案,解释很清楚