__getattr__ специальный метод

78
11

Почему hasattr() возвращает логическое значение True ниже? Атрибут 'bar' не установлен нигде в коде. Спасибо

class AttrClass(object):
def __getattr__(self, name):
pass

data = AttrClass()
print('Current __dict__: ', data.__dict__)
print('Does bar exists?: ', hasattr(data, 'bar'))

Выход:

Current __dict__:   {}
Does bar exists?: True

спросил(а) 2021-01-25T21:30:51+03:00 4 месяца, 4 недели назад
1
Решение
118

Переопределив метод __getattr__ и заставив его всегда возвращать None (поскольку функция, которая явно не возвращает значение, возвращает None неявно), экземпляры AttrClass теперь возвращали бы True для любого заданного имени, переданного в функцию hasattr просто потому, что переопределенный метод __getattr__ делает не hasattr исключение AttributeError, и hasattr возвращает false только тогда, когда он получает исключение AttributeErro при вызове метода __getattr__.

Пожалуйста, обратитесь к документации для деталей.

ответил(а) 2021-01-25T21:30:51+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема