先来看 classmethod, 它的用法:定义操作类,而不是操作实例的方法。classmethod 改变了调用方法的方式,因此类方法的第一个参数是类本身,而不是实例。classmethod 最常见的用途是定义备选构造方法, 如下例子(部分代码):
@classmethod
def frombytes(cls, octets):
typecode = chr(octets[0])
memv = memoryview(octets[1:]).cast(typecode)
return cls(*memv)
frombytes 的最后一行使用 cls 参数构建了一个新实例,即 cls(*memv)。按照约定,类方法的第一个参数名为 cls(但是 Python 不介意具体怎么命名)。
staticmethod 装饰器也会改变方法的调用方式,但是第一个参数不是特殊的值。其实,静态方法就是普通的函数,只是碰巧在类的定义体中,而不是在模块层定义。下面示例对classmethod 和 staticmethod 的行为做了对比。

classmethod 装饰器非常有用,但是我从未见过不得不用 staticmethod 的情况。如果想定义不需要与类交互的函数,那么在模块中定义就好了。有时,函数虽然从不处理类,但是函数的功能与类紧密相关,因此想把它放在近处。即便如此,在同一模块中的类前面或后面定义函数也就行了。
理解classmethod与staticmethod
本文深入解析了Python中classmethod和staticmethod装饰器的用法与区别。classmethod用于定义操作类而非实例的方法,常见于备选构造方法;staticmethod则使方法成为普通函数,与类交互无关。通过示例代码对比两者行为。
1323

被折叠的 条评论
为什么被折叠?



