为什么我们使用@staticmethod?
我只是看不到为什么我们需要使用@staticmethod。让我们从一个例子开始。
class test1: def __init__(self,value):
self.value=value
@staticmethod
def static_add_one(value):
return value+1
@property
def new_val(self):
self.value=self.static_add_one(self.value)
return self.value
a=test1(3)
print(a.new_val) ## >>> 4
class test2:
def __init__(self,value):
self.value=value
def static_add_one(self,value):
return value+1
@property
def new_val(self):
self.value=self.static_add_one(self.value)
return self.value
b=test2(3)
print(b.new_val) ## >>> 4
在上面的示例static_add_one
中,两个类中的方法,在计算中不需要类(自身)的实例。
static_add_one
该类中的方法test1
由装饰@staticmethod
并且可以正常工作。
但是同时,没有修饰static_add_one
的类中的方法也可以通过使用在参数中提供a但完全不使用的技巧来正常工作。test2``@staticmethod``self
那么使用的好处是@staticmethod
什么?它会提高性能吗?还是仅仅是因为python的禅宗指出“ 显式优于隐式 ”?
回答:
使用的原因staticmethod
是,如果您有一些可以作为独立函数编写的东西(不属于任何类的一部分),但是您希望将其保留在类中,因为它在某种意义上与类相关。(例如,它可以是一个不需要类信息的函数,但是其行为特定于类,因此子类可能希望覆盖它。)在许多情况下,它可能同样有意义写一些东西作为独立函数而不是静态方法。
您的示例并不完全相同。一个关键的区别是,即使不使用它self
,您仍然需要一个实例来调用static_add_one
-–您不能使用来直接在类上调用它test2.static_add_one(1)
。因此,那里的行为确实存在差异。静态方法最严重的“竞争”不是忽略的常规方法self
,而是独立的函数。
以上是 为什么我们使用@staticmethod? 的全部内容, 来源链接: utcz.com/qa/397512.html