Я пытаюсь установить свойство класса Python вне класса с помощью функции setattr(self, item, value).
class MyClass:
def getMyProperty(self):
return self.__my_property
def setMyProperty(self, value):
if value is None:
value = ''
self.__my_property = value
my_property = property( getMyProperty, setMyProperty )
А в другом скрипте я создаю экземпляр и хочу указать свойство и позволить мутатору свойства выполнить простую проверку.
myClass = MyClass()
new_value = None
# notice the property in quotes
setattr(myClass, 'my_property', new_value)
Проблема в том, что он не вызывает мутатор setMyProperty(self, value). Для быстрого теста, чтобы убедиться, что он не вызывается, я меняю мутатор на:
def setMyProperty(self, value):
raise ValueError('WTF! Why are you not being called?')
if value is None:
value = ''
self.__my_property = value
Я новичок в Python, и, возможно, есть другой способ сделать то, что я пытаюсь сделать, но может ли кто-нибудь объяснить, почему мутатор не вызывается, когда setattr(self, item, value) называется?
Есть ли другой способ установить свойство через строку? Мне нужно, чтобы проверка внутри мутатора выполнялась при установке значения свойства.
my_property
? - person Sven Marnach   schedule 13.03.2011