Я хочу переопределить __ getattribute __
и моего класса Python. ] __ setattr __
методы. Мой вариант использования обычный: у меня есть несколько специальных имен, которые я хочу обработать, и мне нужно поведение по умолчанию для всего остального. Для __ getattribute __
кажется, что я могу запросить поведение по умолчанию, просто подняв AttributeError
. Однако как я могу добиться того же в __ setattr __
? Вот тривиальный пример реализации класса с неизменяемыми полями «A», «B» и «C.»
class ABCImmutable(SomeSuperclass):
def __getattribute__(self, name):
if name in ("A", "B", "C"):
return "Immutable value of %s" % name
else:
# This should trigger the default behavior for any other
# attribute name.
raise AttributeError()
def __setattr__(self, name, value):
if name in ("A", "B", "C"):
raise AttributeError("%s is an immutable attribute.")
else:
# How do I request the default behavior?
???
Что используется вместо вопросительных знаков? Для классов старого стиля ответ был, очевидно, self .__ dict __ [name] = value
, но в документации указано, что это неверно для классов нового стиля.