Я хочу переопределить __getattr__
метод класса, чтобы сделать что-то необычное, но я не хочу нарушать поведение по умолчанию.
Какой правильный способ сделать это?
python
getattr
getproperty
sheats
источник
источник
Ответы:
Переопределение
__getattr__
должно быть в порядке -__getattr__
вызывается только в крайнем случае, т. Е. Если в экземпляре нет атрибутов, соответствующих имени. Например, если вы обращаетесьfoo.bar
, то__getattr__
будет вызываться, только еслиfoo
не было вызвано ни одного атрибутаbar
. Если атрибут тот, который вы не хотите обрабатывать, поднимитеAttributeError
:Однако, в отличие от
__getattr__
,__getattribute__
будет вызываться первым (работает только для новых стилевых классов, то есть тех, которые наследуются от объекта). В этом случае вы можете сохранить поведение по умолчанию следующим образом:Смотрите документы Python для получения дополнительной информации .
источник
__getattr__
- есть идеи, что делать? (AttributeError: 'super' object has no attribute '__getattr__'
)AttributeError
контекст без атрибута в аргументах исключения.источник
self.__class__.__name__
следует использовать, а неself.__class__
в случае переопределения класса__repr__
Чтобы расширить ответ Михаэля, если вы хотите сохранить поведение по умолчанию, используя его
__getattr__
, вы можете сделать это так:Теперь сообщение об исключении более наглядно:
источник
__getattr__
и__getattribute__
?