setattr(self, item, value)関数を使用して、クラス外の Python クラス プロパティを設定しようとしています。
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) mutatorを呼び出しているように見えないことです。呼び出されないことを確認する簡単なテストのために、ミューテーターを次のように変更します。
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)が呼び出されたときにミューテーターが呼び出されない理由を誰かが説明できますか?
文字列を介してプロパティを設定する別の方法はありますか? プロパティ値を設定するときに、ミューテーター内の検証を実行する必要があります。