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Сообщить о неточности