Мне нравится 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
, который является экземпляром класса C
, и я вызываю myObject.x = 42
, он запустит соответствующий наборщик, что отлично подходит для проверки данных. Но это не мешает кому-либо вызвать myOjbect.b = 47
, и он с радостью создаст новый атрибут b
. Есть ли способ запустить специальный код при настройке нового атрибута? Я мог бы поднять ошибки, чтобы сказать что-то вроде "error, этот атрибут не существует".