В настоящее время я делаю это следующим образом:
class Spam(object):
decorated = None
@classmethod
def decorate(cls, funct):
if cls.decorated is None:
cls.decorated = []
cls.decorated.append(funct)
return funct
class Eggs(Spam):
pass
@Eggs.decorate
def foo():
print "spam and eggs"
print Eggs.decorated # [<function foo at 0x...>]
print Spam.decorated # None
Мне нужно , чтобы иметь возможность сделать это в подклассе, как показано. Проблема в том, что я не могу понять, как сделать поле decorated
недоступным для всех экземпляров. Прямо сейчас у меня есть хакерское решение, изначально установив его на None
, а затем проверив, когда функция оформлена, но это работает только в одном направлении. Другими словами, если я подкласс Eggs
, а затем украсить что-то с помощью функции Eggs.decorate
, это влияет на все подклассы.
Я предполагаю, что мой вопрос: возможно ли иметь изменяемые поля классов, которые не будут разделены между базовыми и подклассами?