Найти в Дзене
Машинное обучение

🤓 Любопытство и dir

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/ django

#python

Наука
7 млн интересуются