У меня есть существующий пример класса в Python 2.7x
class Example(object):
a = None
b = None
c = None
и существующий экземпляр
anInstance = Example()
anInstance.a = 100
anInstance.b = 200
anInstance.c = 300
Я провел рефакторинг/чистку кода, и теперь известно, что anInstance.c
— дорогостоящая операция, которая редко используется.
в идеальном мире я бы просто сделал это:
class Example(object):
_c = None
@property
def c(self):
if self._c is not None:
self._c = DO EXPENSIVE STUFF HERE
return self._c
Проблема в том, что я не могу изменить class Example
прямо сейчас. [Таким образом, быстрое исправление состояло бы в том, чтобы установить его как функцию и изменить каждые obj.c
на obj.c()
]
Насколько я знаю, я не могу динамически назначать свойство/запоминание, если я не изменю объект. Правильно ли это понимание? Я ожидаю разочарования здесь, я просто хочу подтверждения.
obj.c
не является свойством, то оно вычисляется вExample.__init__
, и в этом случае вам нужно изменитьExample
? В противном случае, почему превращение его в свойство что-то изменит? - person Katriel   schedule 22.06.2013