python3中@staticmethod的好处?

时间:2015-05-26 14:34:36

标签: python python-3.x static-methods

我有一个简单的问题:为什么在静态方法上使用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中有这种行为的原因吗?

谢谢:) palkeo。

1 个答案:

答案 0 :(得分:1)

尝试使用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