采用以下示例脚本:
class A(object):
@classmethod
def one(cls):
print("I am class")
@staticmethod
def two():
print("I am static")
class B(object):
one = A.one
two = A.two
B.one()
B.two()
当我使用 Python 2.7.11 运行此脚本时,我得到:
I am class
Traceback (most recent call last):
File "test.py", line 17, in <module>
B.two()
TypeError: unbound method two() must be called with B instance as first argument (got nothing instead)
似乎 @classmethod 装饰器在类中保留,但 @staticmethod 不是。
Python 3.4 的行为符合预期:
I am class
I am static
为什么 Python2 不保留 @staticmethod,是否有解决方法?
编辑:从班级中抽出两个(并保留@staticmethod)似乎可行,但这对我来说仍然很奇怪。