dir

Функция dir() возвращает список имен (атрибутов и методов) для указанного объекта. Если объект не указан, возвращает список имен в текущей области видимости.

Синтаксис

dir([object])

Аргументы

  • object (необязательный):
    • Что означает: Объект, атрибуты и методы которого нужно перечислить.
    • Возможные значения: Любой объект в Python (строка, список, модуль, класс, функция и т. д.).

Возвращаемое значение

Возвращает список строк, представляющих имена доступных атрибутов и методов объекта. Если объект не указан, возвращает список имен в текущей области видимости.

Примеры использования

print(dir())  # Вывод всех имен в текущей области видимости
print(dir([]))  # Вывод атрибутов и методов списка

# Пример вывода:
# ['__add__', '__class__', '__contains__', ..., 'append', 'clear', 'extend', 'pop', 'remove', 'sort']
import math
print(dir(math))  # Вывод всех атрибутов модуля math
# Пример вывода:
# ['__doc__', '__loader__', '__name__', ..., 'cos', 'sin', 'sqrt', 'tan']

Эквивалентный код

def pyplanet_dir(obj=None):
    if obj is None:
        # Получение имен в текущей области видимости
        return globals().keys()
    else:
        # Получение атрибутов объекта
        return obj.__dir__()

Частые ошибки

  1. Передача объекта с некорректной реализацией метода __dir__:

    Если объект определяет свой собственный метод __dir__ с ошибками, результат dir() может быть непредсказуемым.

    Как исправить: Убедитесь, что метод __dir__ возвращает корректный список строк.

  2. Ожидание, что dir() вернет только пользовательские атрибуты:

    class MyClass:
        pass
    
    print(dir(MyClass))
    # Вывод включает множество встроенных атрибутов, например '__class__', '__doc__' и т. д.
    

    Как исправить: Чтобы отфильтровать только пользовательские атрибуты, используйте атрибут __dict__:

    obj = MyClass()
    print(obj.__dict__)
    

Часто задаваемые вопросы

  1. Можно ли использовать dir() для встроенных объектов? Да, например, для строк, списков, словарей и т. д.
  2. Что произойдет, если объект не указан? Функция вернет список всех имен в текущей области видимости.
  3. Как понять, что означают элементы списка, возвращенного dir()? Используйте функцию help для получения документации по конкретному атрибуту или методу.
  4. Можно ли использовать dir() для пользовательских классов и объектов? Да, dir() вернет все доступные атрибуты, включая унаследованные.
  5. Какая разница между dir() и __dict__? Атрибут __dict__ возвращает только пользовательские атрибуты объекта, тогда как dir() включает также встроенные атрибуты и методы.