dir – это встроенная функция Python. Она позволяет нам заглянуть внутрь объекта (или модуля) и узнать, какие он имеет атрибуты (методы, поля и т.п.)
dir возвращает список строк – имен атрибутов.
dir будет очень полезна и новичкам, и профессионалам. Недавно к нам в руки попал проприетарный модуль на C++ для Python без документации. Пользуясь dir мы узнали, как называются интересующие нас методы и поля классов.
📎 dir без аргументов вернет список объектов, доступных в текущем модуле. Сюда попадут объявленные переменные, функции, классы, импортированные модули.
>>> import math
>>> x = 8
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'math', 'x']
📎 dir с аргументом-модулем выведет нам перечень экспортированных модулем функций и классов.
>>> dir(math)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
Для экземпляров классов dir пытается сначала вызвать магический метод dir у объекта; если этот метод неопределен, то она смотрит в dict. Даже если нет dict, dir выведет известные ему атрибуты типа.
А еще я тут подготовил функцию, которая рекурсивно печатает dir объекта или модуля.
def recudir(obj, max_depth=2, _d=0):
for name in dir(obj):
if not name.startswith('__'):
attr = getattr(obj, name)
print(' - ' * _d, f'\033[92m{name}\033[0m', f'[{type(attr)}]');
if _d < max_depth:
recudir(attr, max_depth, _d + 1)
#python