- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个简单的问题:为什么在静态方法上使用 staticmethod 装饰器?您可以创建没有“self”参数的静态方法,无需此装饰器。
当使用python2时,这是必要的:
>>> class A:
... def p(object_to_print):
... print(object_to_print)
...
>>> A.p('test')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method p() must be called with A instance as first argument (got str instance instead)
但是,如果我使用 python 3 做同样的事情,它会工作得很好。
如果没有装饰器也能正常工作,为什么还要使用装饰器呢?如果第一个参数不是 self,很明显它是一个静态方法。我能看到的唯一原因是在误用的情况下获得更清晰的错误......
Python 3 中出现这种行为有什么原因吗?
谢谢:)帕尔克奥。
最佳答案
尝试使用 A
实例调用此方法,您将得到一个异常:
>>> a = A()
>>> a.p('test')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: p() takes 1 positional argument but 2 were given
因为参数被视为实例本身:
>>> a.p()
<__main__.A object at 0x7f9f60f56048>
但是,如果该方法用 staticmethod
修饰,它将按预期工作:
>>> A.p('test')
test
>>> a.p('test')
test
关于python - python3中@staticmethod的好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30461580/
我在实践中理解了 @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 需要更多的字母。 使用它的唯一好处(对我来说)可能是代码更清晰,但
我是一名优秀的程序员,十分优秀!