gpt4 book ai didi

python - 使用@staticmethod 有什么好处吗?

转载 作者:太空狗 更新时间:2023-10-29 17:37:36 28 4
gpt4 key购买 nike

我想知道您是否在代码中使用了@staticmethod 装饰器。

我个人不使用它,因为写 @staticmethod 比写 self 需要更多的字母。

使用它的唯一好处(对我来说)可能是代码更清晰,但由于我通常为 sphinx 编写方法描述,所以我总是声明方法是否使用对象。

或者也许我应该开始使用@staticmethod 装饰器?

最佳答案

是否使用@staticmethod取决于你想达到什么目的。因为要输入更多内容而忽略装饰器是一个相当愚蠢的理由(无意冒犯!),这表明您还没有理解 Python 中静态方法的概念!

静态方法独立于类和任何类实例。他们只使用类范围作为命名空间。如果您省略 @staticmethod 装饰器,您将创建一个实例方法,如果不构造实例就无法使用。

这是一个非常简单的类Foo:

>>> class Foo(object):
... @staticmethod
... def foo():
... print 'foo'
...
... def bar(self):
... print 'bar'

现在,Foo.foo() 是一个可以直接调用的静态方法:

>>> Foo.foo()
foo

Foo.bar() 在另一方面是一个实例方法,只能从 Foo 的实例(对象)调用:

>>> Foo.bar()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method foo() must be called with Foo instance as first argument (got nothing instead)
>>> foo = Foo()
>>> foo.bar()
bar

回答你的问题:如果你想定义一个静态方法,使用@staticmethod。否则,不要。

如果您有一个不使用 self 的方法,因此可以写成静态方法,问问自己:您是否想从外面没有实例?大多数时候,答案是:否。

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

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