【发布时间】:2011-03-12 22:51:28
【问题描述】:
我正在尝试通过 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。为了快速测试以验证它没有被调用,我将 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) 时没有调用 mutator 被调用了?
还有其他方法可以通过字符串设置属性吗?设置属性值时,我需要执行 mutator 内部的验证。
【问题讨论】:
-
你真的用你的setter和getter函数定义了一个属性吗?您的代码没有显示这样的定义。 Python 应该如何知道
my_property使用什么 getter 和 setter? -
@Sven Marnach:糟糕,忘记在示例中添加该内容。但是,是的,我是在实际代码中定义的。
标签: python properties setattr