Python Glossary English

Python 3.11+inspectфункция

inspect.getmembers_static()

члены и модули

Как getmembers(), но без вызова дескрипторов, __getattr__ и __getattribute__: перечисляет атрибуты, не исполняя код объекта.

Синтаксис

inspect.getmembers_static(object, predicate=None) -> list[tuple[str, object]]

Значения здесь «сырые»: для свойства вернётся сам объект property, а не результат геттера, для метода — функция из класса, а не связанный метод. Атрибуты, которые объект создаёт на лету в __getattr__, не попадут в список. Зато обход безопасен для прокси, ленивых ORM-моделей и объектов, чьи свойства бросают исключения — там getmembers() либо выполнит лишнее, либо упадёт.

Примеры

import inspect
class Model:
    def __init__(self):
        self.id = 1
    @property
    def broken(self):
        raise RuntimeError('нет соединения')
pairs = [(n, type(v).__name__) for n, v in inspect.getmembers_static(Model())
         if not n.startswith('_')]
print(pairs)  # → [('broken', 'property'), ('id', 'int')]
try:
    inspect.getmembers(Model())
except RuntimeError as e:
    print('getmembers упал:', e)  # → getmembers упал: нет соединения

См. также

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