Python Glossary English

Python 3.2+inspectфункция

inspect.getattr_static()

статический доступ к атрибутам

Находит атрибут, не запуская код: свойства, __getattr__ и __getattribute__ не вызываются. Нужна инструментам, которые только смотрят на объект.

Синтаксис

inspect.getattr_static(obj, attr[, default])

Обычный getattr и даже hasattr исполняют свойство — со всеми побочными эффектами. getattr_static возвращает то, что лежит в словарях: объект property, а не его значение; функцию, а не связанный метод; staticmethod, а не функцию. Атрибуты, которые создаёт __getattr__, она не видит — AttributeError или значение default.

Примеры

import inspect
class P:
    @property
    def val(self):
        print('property executed')
        return 42
    def __getattr__(self, name):
        return 'dyn:' + name
p = P()
print(getattr(p, 'val'))  # → property executed / 42
print(type(inspect.getattr_static(p, 'val')).__name__)  # → property
print(getattr(p, 'zzz'), inspect.getattr_static(p, 'zzz', 'нет'))  # → dyn:zzz нет
import inspect
class S:
    @staticmethod
    def sm(): pass
    def m(self): pass
print(type(inspect.getattr_static(S, 'sm')).__name__, type(S.sm).__name__)
# → staticmethod function
print(type(inspect.getattr_static(S(), 'm')).__name__, type(S().m).__name__)
# → function method

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности