【发布时间】:2019-06-13 07:33:00
【问题描述】:
我从未使用过@classmethod,也没有想到任何使用它的示例,我知道它是如何工作的,但我不知道什么时候该使用它
class Example:
def __init__(self,param1,param2):
self.param1 = param1
self.param2 = param2
@classmethod
def my_method(cls,param1,param2):
return cls(param1,param2)
example = Example.my_method(1,2)
print(example)
输出:
<__main__.Example object at 0x02EC57D0>
但为什么不这样做呢?
class Example:
def __init__(self,param1,param2):
self.param1 = param1
self.param2 = param2
def my_method(self,param1,param2):
return Example(param1,param2)
example = Example(1,2)
method = example.my_method(3,4)
print(method)
输出:
<__main__.Example object at 0x02EC57D0>
结果是一样的,但不知道什么时候可以使用 classmethod
【问题讨论】:
-
现在想象你从这个类继承。您将始终获得一个
Example实例,而不是您的子类中的实例。 -
您的示例是类方法(构造函数)的经典用法。使用这些而不是常规方法的原因是您不必初始化实例即可使用它们。想象一下你的班级'
__init__做了一些诸如打开网络连接或消耗某种资源之类的事情;您不想创建一个实例只是为了创建其他实例。您可以直接调用Example.my_method()而无需任何实际的 Example 实例。这个问题也可能有帮助stackoverflow.com/questions/38238/…
标签: python decorator python-decorators