Python Glossary English

все Python 3inspectфункция

inspect.getmembers()

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

Все атрибуты объекта списком пар (имя, значение), отсортированных по имени; predicate оставляет только подходящие.

Синтаксис

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

getmembers() читает каждый атрибут через getattr, а значит запускает property и __getattr__: свойство с запросом к базе выполнится, а исключение из него, кроме AttributeError, прервёт весь обход. Чтобы просто перечислить, не трогая код объекта, есть getmembers_static (3.11+). Предикат получает значение, а не имя: getmembers(mod, inspect.isfunction). Атрибуты метакласса у класса не попадают в результат, хотя hasattr их видит. Недокументированная classify_class_attrs (с кортежем Attribute) раскладывает атрибуты класса по видам для pydoc.

Примеры

import inspect
class User:
    def __init__(self):
        self.name = 'Ann'
    @property
    def slow(self):
        print('запрос к базе')
        return 42
names = [n for n, v in inspect.getmembers(User()) if not n.startswith('_')]
print(names)  # → ['name', 'slow'] — перед этим напечатано «запрос к базе»
import inspect, math
funcs = inspect.getmembers(math, inspect.isbuiltin)
print([name for name, _ in funcs][:3])  # → ['acos', 'acosh', 'asin']

См. также

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