我有一个简单的问题:为什么在静态方法上使用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。
答案 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