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