- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道您是否在代码中使用了@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/
我在实践中理解了 @staticmethod 装饰器。但是模拟静态方法的一个错误让我陷入了 Python 语义兔子洞。 The standard type hierarchy中的描述部分让我感到困惑:
我在实践中理解了 @staticmethod 装饰器。但是模拟静态方法的一个错误让我陷入了 Python 语义兔子洞。 The standard type hierarchy中的描述部分让我感到困惑:
我做了这两门课: class A: @staticmethod def f(x): print("x is", x) class B: def f(x):
我最近使用 pycharm 和 sonarqube 来审查我的代码。这两个工具都建议更新许多方法,例如 get_success_url,它们在其主体中未使用 self 以使用 @staticmetho
问题就是这么说的。我有一个在辅助函数中调用静态方法的抽象类,我希望子类简单地定义静态方法并使用它运行。 也许我可以使用 getattr 之类的东西?我应该改用@classmethod 吗? 最佳答案
我只是不明白为什么我们需要使用@staticmethod。让我们从一个例子开始。 class test1: def __init__(self,value): self.val
假设我有一个 class这需要一个函数(或者我应该说方法)是: 独立于我的class实例 - 不需要 self争论; 仅在我的 class 中被调用对象 我在任何时候都不需要访问它(例如覆盖它); 我
我有这个代码: class A(object): @staticmethod def open(): return 123 @staticmethod
我正在写一个非常普通的 django 管理类,带有这样的自定义操作: class DeviceAdmin(admin.ModelAdmin): actions = ("enable", "di
您好,我正在尝试创建一个装饰器,但收到staticmethod object not callable错误,下面是我的代码 from db.persistence import S3Mediator
class UserInput(): users=[] def __init__(self, name,lista,listb,listc,listd): self.n
关于为什么/何时应该使用类方法与静态方法,有几个关于 SO 的很好的解释,但我一直无法找到关于何时使用静态方法而不是根本没有修饰的答案。考虑一下 class Foo(object):
在 Python 3.x 中,我可以用 bar() 做什么而不能用 foo() 做什么? class A: def foo(): print("some code")
我想创建元类,它将用跟踪装饰器装饰每个函数。 所以我得到了这个: from functools import wraps from inspect import getfile from arrow
我正在尝试实现 infer_class 函数,给定一个方法,找出该方法所属的类。 到目前为止,我有这样的东西: import inspect def infer_class(f): if in
我有一个 python 类,它有多个方法。我已经通过 @staticmethod 实例定义了我的方法,我想从我的主函数 (main_function) 内部调用我的类的其他方法。我想我需要 self
我有一个简短的问题。我正在尝试向模型中添加一个字段,该字段是 2 个字段的总和。 例如: class MyModel(models.Model) fee = models.DecimalF
我想了解静态方法在内部是如何工作的。我知道如何使用 @staticmethod 装饰器,但我将避免在这篇文章中使用它,以便更深入地了解静态方法的工作原理并提出我的问题。 根据我对 Python 的了解
在 Python 中,在一个类中,静态方法可以调用在同一类中定义的另一个局部函数/方法吗? 我尝试了以下代码并收到一条错误消息,指出 foo1() 未定义。 class trialOne(object
我想知道您是否在代码中使用了@staticmethod 装饰器。 我个人不使用它,因为写 @staticmethod 比写 self 需要更多的字母。 使用它的唯一好处(对我来说)可能是代码更清晰,但
我是一名优秀的程序员,十分优秀!