Я пытаюсь установить свойство класса 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) называется?
Есть ли другой способ установить свойство через строку? Мне нужно, чтобы проверка внутри мутатора выполнялась при установке значения свойства.