Возьмем следующий пример script:
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()
Когда я запускаю этот script с 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, и есть ли способ обхода?
edit: взятие двух из класса (и сохранение @staticmethod), похоже, работает, но это все еще кажется странным для меня.