gpt4 book ai didi

python - 为什么我们使用@staticmethod?

转载 作者:太空狗 更新时间:2023-10-30 00:23:30 34 4
gpt4 key购买 nike

我只是不明白为什么我们需要使用@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在计算时不需要类(self)的实例。

test1 中的方法static_add_one@staticmethod 修饰并正常工作。

但与此同时,类test2中没有@staticmethod修饰的方法static_add_one也可以通过使用一个技巧正常工作在参数中提供了一个 self 但根本不使用它。

那么使用@staticmethod有什么好处呢?它会提高性能吗?或者仅仅是因为 python 的禅宗说“显式优于隐式”?

最佳答案

使用 staticmethod 的原因是如果你有一些东西可以写成一个独立的函数(不是任何类的一部分),但你想把它保留在类中,因为它在某种程度上是语义相关的到类(class)。 (例如,它可能是一个不需要来自类的任何信息的函数,但其​​行为是特定于该类的,因此子类可能想要覆盖它。)在许多情况下,它可能同样有意义将某些东西编写为独立函数而不是静态方法。

您的示例实际上并不相同。一个关键的区别是,即使你不使用 self,你仍然需要一个实例来调用 static_add_one --- 你不能直接在类上调用它使用 test2.static_add_one(1)。因此,那里的行为存在真正的差异。静态方法最严重的“竞争对手”不是忽略 self 的常规方法,而是独立函数。

关于python - 为什么我们使用@staticmethod?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23508248/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com