我喜欢Python 的@property
装饰系统。我喜欢你可以在调用时运行自定义代码aClassObect.attribute
。特别是在设置属性时验证数据。但是,我想要但找不到的一件事是在尝试设置不存在的属性时运行自定义代码的方法。例如,假设我有以下课程:
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
现在,如果我有myObj
,它是 class 的一个实例C
,并且我调用myObject.x = 42
,它将运行适当的 setter,这对于验证数据非常有用。但这并不能阻止某人调用myOjbect.b = 47
,它会愉快地创建一个名为 的新属性b
。设置新属性时有什么方法可以运行特殊代码吗?我有能力提出错误,比如“错误,这个属性不存在”。