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