← Назад к вопросам

Зачем нужен метод dir() для объектов в Python?

1.0 Junior🔥 231 комментариев
#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Метод dir() в Python

dir() — встроенная функция Python, которая возвращает отсортированный список атрибутов и методов объекта. Это критически важный инструмент для исследования и отладки кода в интерактивных окружениях (REPL, Jupyter notebooks).

Основное назначение dir()

# Базовый пример
obj = "hello"
attributes = dir(obj)

# Выводит список всех методов и атрибутов строки
print(attributes)
# [__add__, __class__, __contains__, capitalize, casefold, center, count, encode, ...]

1. Исследование объектов и их возможностей

dir() помогает узнать, какие методы доступны у объекта, без необходимости заглядывать в документацию:

import numpy as np
import pandas as pd

# Что может делать NumPy array?
arr = np.array([1, 2, 3])
print([m for m in dir(arr) if not m.startswith("_")])  # Без служебных методов
# [all, any, argmax, argmin, argsort, astype, base, byteswap, ...]

# Что может делать DataFrame?
df = pd.DataFrame({"a": [1, 2, 3]})
methods = [m for m in dir(df) if not m.startswith("_")]
print(methods[:10])  # Первые 10 методов
# [abs, add, add_prefix, add_suffix, agg, aggregate, align, ...]

2. Отладка и поиск методов

В интерактивной работе dir() помогает быстро найти нужный метод:

# Ищу метод, чтобы получить индекс элемента
my_list = [10, 20, 30]
print([m for m in dir(my_list) if "ind" in m])
# [index]  — нашли метод index()

# Ищу методы для работы со строками, содержащие "split"
my_string = "hello world"
print([m for m in dir(my_string) if "split" in m])
# [split, rsplit, splitlines]

3. Различие между dir() и type()

# dir() показывает все методы и атрибуты
obj = 42
print(dir(obj))  # Полный список методов int
# [__abs__, __add__, __and__, __bool__, __ceil__, ..., bit_length, conjugate, ...]

# type() показывает тип объекта
print(type(obj))  # <class int>

# isinstance() проверяет типы
print(isinstance(obj, int))  # True

4. Работа с пользовательскими классами

class DataAnalyst:
    def __init__(self, name):
        self.name = name
    
    def analyze_data(self):
        return f"Анализирую данные..."
    
    def visualize(self):
        return "Строю график"

analyst = DataAnalyst("Иван")

# Смотрим, что доступно
print([m for m in dir(analyst) if not m.startswith("_")])
# [analyze_data, name, visualize]

# Проверяем, есть ли нужный метод
if hasattr(analyst, "analyze_data"):
    analyst.analyze_data()

5. Фильтрация служебных методов

По умолчанию dir() включает служебные методы (dunder methods), которые начинаются и заканчиваются двойными подчёркиваниями:

# Все методы
print(len(dir(list)))  # Часто 70+

# Только публичные методы
public_methods = [m for m in dir(list) if not m.startswith("_")]
print(public_methods)
# [append, clear, copy, count, extend, index, insert, pop, remove, reverse, sort]

# Только магические методы
magic_methods = [m for m in dir(list) if m.startswith("__") and m.endswith("__")]
print(magic_methods[:5])
# [__add__, __class__, __contains__, __delattr__, __delitem__]

6. Практическое применение в Data Science

import pandas as pd
import sklearn.preprocessing as preprocessing

# Изучаем, какие трансформеры доступны в sklearn
scaler = preprocessing.StandardScaler()

# Ищем методы для трансформации данных
transform_methods = [m for m in dir(scaler) if "transform" in m or "fit" in m]
print(transform_methods)
# [fit, fit_transform, fit_predict]

# Смотрим параметры DataFramе
df = pd.DataFrame({"a": [1, 2, 3]})
print([m for m in dir(df) if m.endswith("_name")])
# [index_name]  — нашли, что это атрибут

7. Альтернативы и дополнительные инструменты

# Функция help() — подробная информация
help(list.append)
# Показывает полную документацию

# Функция getattr() — получить атрибут по имени
obj = [1, 2, 3]
method = getattr(obj, "append")  # Получить метод по названию
method(4)
print(obj)  # [1, 2, 3, 4]

# Функция vars() — атрибуты объекта (без методов класса)
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person("Алиса", 30)
print(vars(person))  # {name: Алиса, age: 30}

8. dir() в Jupyter notebooks

# Автодополнение работает благодаря dir()
# Когда вы пишете: obj. и нажимаете Tab, Jupyter использует dir(obj)

df = pd.DataFrame({"sales": [100, 200, 300]})
# Если напечатать: df. и нажать Tab, увидим все методы DataFrame
# df.sum, df.mean, df.groupby, df.describe и т.д.

Заключение

dir() — это эссенциальный инструмент для:

  • Исследования API: быстро узнать, какие методы доступны
  • Отладки: найти правильное имя метода
  • Обучения: изучать новые библиотеки интерактивно
  • Интроспекции: понимать структуру объектов

Для Data Scientist это особенно полезно при работе с pandas, NumPy, scikit-learn, где каждая библиотека имеет множество методов. dir() + help() — это ваши верные помощники в интерактивной разработке.

Зачем нужен метод dir() для объектов в Python? | PrepBro