Я пытаюсь написать класс Python, который использует функцию декоратора, которая нуждается в информации о состоянии экземпляра.Это работает как задумано, но если я явно сделаю декоратор статическим методом, я получу следующую ошибку:
Traceback (most recent call last):
File "tford.py", line 1, in <module>
class TFord(object):
File "tford.py", line 14, in TFord
@ensure_black
TypeError: 'staticmethod' object is not callable
Почему?
Вот код:
class TFord(object):
def __init__(self, color):
self.color = color
@staticmethod
def ensure_black(func):
def _aux(self, *args, **kwargs):
if self.color == 'black':
return func(*args, **kwargs)
else:
return None
return _aux
@ensure_black
def get():
return 'Here is your shiny new T-Ford'
if __name__ == '__main__':
ford_red = TFord('red')
ford_black = TFord('black')
print ford_red.get()
print ford_black.get()
А если я просто уберу строку @staticmethod
, все работает, но я не понимаю, почему.Разве ему не нужно self
в качестве первого аргумента?