__getattr__ специальный метод - PullRequest
0 голосов
/ 03 февраля 2019

Почему 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

1 Ответ

0 голосов
/ 03 февраля 2019

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

Подробнее см. В документации 1015 *.

...