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__()
Частые ошибки
Передача объекта с некорректной реализацией метода __dir__:
Если объект определяет свой собственный метод __dir__ с ошибками, результат dir() может быть непредсказуемым.
Как исправить: Убедитесь, что метод __dir__ возвращает корректный список строк.
Ожидание, что dir() вернет только пользовательские атрибуты:
class MyClass: pass print(dir(MyClass)) # Вывод включает множество встроенных атрибутов, например '__class__', '__doc__' и т. д.
Как исправить: Чтобы отфильтровать только пользовательские атрибуты, используйте атрибут __dict__:
obj = MyClass() print(obj.__dict__)
Часто задаваемые вопросы
- Можно ли использовать dir() для встроенных объектов? Да, например, для строк, списков, словарей и т. д.
- Что произойдет, если объект не указан? Функция вернет список всех имен в текущей области видимости.
- Как понять, что означают элементы списка, возвращенного dir()? Используйте функцию help для получения документации по конкретному атрибуту или методу.
- Можно ли использовать dir() для пользовательских классов и объектов? Да, dir() вернет все доступные атрибуты, включая унаследованные.
- Какая разница между dir() и __dict__? Атрибут __dict__ возвращает только пользовательские атрибуты объекта, тогда как dir() включает также встроенные атрибуты и методы.