У меня есть что-то, называемое Node. Оба определения и теоремы являются типом node, но только определениям должно быть разрешено иметь атрибут plural
:
class Definition(Node):
def __init__(self,dic):
self.type = "definition"
super(Definition, self).__init__(dic)
self.plural = move_attribute(dic, {'plural', 'pl'}, strict=False)
@property
def plural(self):
return self._plural
@plural.setter
def plural(self, new_plural):
if new_plural is None:
self._plural = None
else:
clean_plural = check_type_and_clean(new_plural, str)
assert dunderscore_count(clean_plural)>=2
self._plural = clean_plural
class Theorem(Node):
def __init__(self, dic):
self.type = "theorem"
super().__init__(dic)
self.proofs = move_attribute(dic, {'proofs', 'proof'}, strict=False)
# theorems CANNOT have plurals:
# if 'plural' in self:
# raise KeyError('Theorems cannot have plurals.')
Как вы можете видеть, у определений есть plural.setter
, но теорем нет. Однако код
theorem = Theorem(some input)
theorem.plural = "some plural"
работает отлично и не вызывает ошибок. Но я хочу, чтобы это привело к ошибке. Как вы можете видеть, я попытался проверить множественные числа вручную в нижней части моего кода, но это будет только патч. Я хотел бы заблокировать установку атрибута ANY, который явно не определен. Какова наилучшая практика для такого рода вещей?
Я ищу ответ, который удовлетворяет требованиям цыпленка":
Я не думаю, что это решает мою проблему. В обоих ваших решениях я могу добавьте код t.chicken = 'hi'; print (t.chicken), и он печатает привет без ошибок. Я не хочу, чтобы пользователи могли создавать новые такие как курица.