Функция dir() в Python, все атрибуты объекта
Функция dir() , вызванная без аргумента, возвращает список имен в текущей локальной области, а вызванная с аргументом попытается вернуть список допустимых атрибутов для указанного объекта.
Если объект имеет метод с именем __dir__() , этот метод будет вызван и вернет список атрибутов. Это позволяет объектам, реализующим пользовательскую функцию __getattr__() или __getattribute__() , настраивать способ представления своих атрибутов для функции dir().
Если объект не предоставляет метод __dir__() , то функция делает все возможное, чтобы собрать информацию из атрибута __dict__ объекта, если он определен, и из объекта типа. Результирующий список не обязательно является полным и может быть неточным, если объект имеет пользовательский __getattr__() .
Механизм dir() по умолчанию ведет себя по-разному с различными типами объектов, поскольку он пытается создать наиболее релевантную, а не полную информацию:
- Если объект является модулем, список будет содержать имена атрибутов модуля;
- Если объект является типом или классом, список будет содержать имена атрибутов данного объекта и его родителей (вычисляются рекурсивно).
- В других случаях список будет содержать имена атрибутов самого объекта, его класса, и классов-родителей (вычисляются рекурсивно).
Функция dir() в основном используется в интерактивном режиме интерпретатора. Она пытается предоставить интересный набор имен, а не строго определенный набор имен. Ее поведение может изменяться в разных версиях Python.
Примеры получения списка атрибутов объекта.
>>> x = 5 >>> dir() ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x'] >>> import struct >>> dir() ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'struct', 'x'] >>> dir(struct) ['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_clearcache', 'calcsize', 'error', 'iter_unpack', 'pack', 'pack_into', 'unpack', 'unpack_from'] >>> class Shape: . def __dir__(self): . return ['area', 'perimeter', 'location'] >>> s = Shape() >>> dir(s) ['area', 'location', 'perimeter']
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция abs(), абсолютное значение числа
- Функция all(), все элементы True
- Функция any(), хотя бы один элемент True
- Функция ascii(), преобразует строку в ASCII
- Функция bin(), число в двоичную строку
- Класс bool(), логическое значение объекта
- Функция breakpoint(), отладчик кода
- Класс bytearray(), преобразует в массив байтов
- Класс bytes(), преобразует в строку байтов
- Функция callable(), проверяет можно ли вызвать объект
- Функция chr(), число в символ Юникода
- Класс classmethod, делает функцию методом класса
- Функция compile() компилирует блок кода Python
- Класс complex(), преобразует в комплексное число
- Функция delattr(), удаляет атрибут объекта
- Класс dict() создает словарь
- Функция dir(), все атрибуты объекта
- Функция divmod(), делит числа с остатком
- Функция enumerate(), счетчик элементов последовательности
- Функция eval(), выполняет строку-выражение с кодом
- Функция exec(), выполняет блок кода
- Функция filter(), фильтрует список по условию
- Класс float(), преобразует в вещественное число
- Функция format(), форматирует значение переменной
- Класс frozenset(), преобразует в неизменяемое множество
- Функция getattr(), значение атрибута по имени
- Функция globals(), переменные глобальной области
- Функция hasattr(), наличие атрибута объекта
- Функция hash(), хэш-значение объекта
- Функция help(), справка по любому объекту
- Функция hex(), число в шестнадцатеричную строку
- Функция id(), идентификатор объекта
- Функция input(), ввод данных с клавиатуры
- Класс int(), преобразует в тип int
- Функция isinstance(), принадлежность экземпляра к классу
- Функция issubclass(), проверяет наследование класса
- Функция iter(), создает итератор
- Функция len(), количество элементов объекта
- Класс list(), преобразовывает в список
- Функция locals(), переменные локальной области
- Функция map(), обработка последовательности без цикла
- Функция max(), максимальное значение элемента
- Класс memoryview(), ссылка на буфер обмена
- Функция min(), минимальное значение элемента
- Функция next(), следующий элемент итератора
- Класс object(), возвращает безликий объект
- Функция oct(), число в восьмеричную строку
- Функция open(), открывает файл на чтение/запись
- Функция ord(), число символа Unicode
- Функция pow(), возводит число в степень
- Функция print(), печатает объект
- Класс property(), метод класса как свойство
- Класс range(), генерирует арифметические последовательности
- Функция repr(), описание объекта
- Функция reversed(), разворачивает последовательность
- Функция round(), округляет число
- Класс set(), создает или преобразовывает в множество
- Функция setattr(), создает атрибут объекта
- Класс slice(), шаблон среза
- Функция sorted(), выполняет сортировку
- Декоратор staticmethod(), метод класса в статический метод
- Класс str(), преобразует объект в строку
- Функция sum(), сумма последовательности
- Функция super(), доступ к унаследованным методам
- Класс tuple(), создает или преобразует в кортеж
- Класс type(), возвращает тип объекта
- Функция vars(), словарь переменных объекта
- Функция zip(), объединить элементы в список кортежей
- Функция __import__(), находит и импортирует модуль
- Функция aiter(), создает асинхронный итератор
- Функция anext(), следующий элемент асинхронного итератора
dir(object)
Возвращает атрибуты объекта obj в алфавитном порядке. При вызове без аргумента, возвращает имена переменных, доступные в локальной области.
- Определение в классе метода __dir__ , позволяет управлять результатом выполнения данной функции для экземпляров класса.
- Это может быть особенно полезно, когда класс определяет также методы доступа к атрибутам __getattr__ и __getattribute__ .
- Для объектов, класс которых не определен __dir__ , функция попытается определить атрибуты по данным __dict__ .
- Возвращаемый список может включать не все атрибуты, особенно в случаях с переопределенным __getattr__ .
Механизм извлечения имён может быть реализован по разному для различных типов:
- Если объект является модулем, список будет содержать имена атрибутов модуля;
- Если объект является типом или классом, список будет содержать имена атрибутов данного объекта и его родителей (вычисляются рекурсивно).
- В других случаях список будет содержать имена атрибутов самого объекта, его класса, и классов-родителей (вычисляются рекурсивно).
Параметры ¶
Фукция dir() принимает один параметр:
- объект — может быть пустым/заполненным кортежем, списком, набором, словарем и т. д. или любым определяемым пользователем объектом.
Возвращаемое значение ¶
- Функция dir() возвращает список допустимых атрибутов переданного объекта.
Примеры ¶
dir(int) # ['__abs__', '__add__', '__and__', '__bool__', . ] dir('some') # ['__add__', '__class__', '__contains__', '__delattr__', . ]
Python с нуля. Освойте с Виртуальным ИИ-помощником!
Dir python что это
В языке Python есть небольшой набор очень полезных встроенных функций. Все остальные функции распределены по модулям. В самом деле, это удачное проектное решение позволяет предотвратить разбухание ядра языка, как это произошло с некоторыми другими скриптовыми языками (например, Visual Basic).
Функция type возвращает тип произвольного объекта. Возможные значения типов перечислены в модуле types. Определение типа полезно в функциях, способных обрабатывать данные нескольких типов.
Пример 2.6. Функция type
>>> type(1) >>> li = [] >>> type(li) >>> import odbchelper >>> type(odbchelper) >>> import types >>> type(odbchelper) == types.ModuleType 1
| Функция type воспринимает объект произвольного типа и возвращает его тип. Аргумент действительно может быть произвольного типа: число, строка, список, словарь, кортеж, функция, класс, модуль и даже сам тип. | |
| В качестве аргумента может использоваться переменная. | |
| Функция type работает и c модулей. | |
| Вы можете использовать константы, определенные в модуле types для сравнения типов объектов. Именно это и делает, как мы скоро увидим, функция help. |
Функция str преобразует данные в строку. Для любого типа данных можно получить строковое представление.
Пример 2.7. Функция str
>>> str(1) '1' >>> horsemen = ['war', 'pestilence', 'famine'] >>> horsemen.append('Powerbuilder') >>> str(horsemen) "['war', 'pestilence', 'famine', 'Powerbuilder']" >>> str(odbchelper) "" >>> str(None) 'None'
| Вы, наверное, ожидали, что str будет работать с такими простыми типами данных, как целые числа, так как почти каждый язык содержит функцию для преобразования целого числа в строку. | |
| Однако, str работает и с объектами других типов. В данном случае мы получаем строковое представление списка. | |
| Функция str работает и с модулями. Обратите внимание, что строковое представление модуля содержит путь к модулю на диске, так что в вашем случае он будет отличаться. | |
| Важно также, что str работает и с объектом None, “нулевым” значением в языке Python. В этом случае она возвращает строку 'None'. Мы воспользуемся этим в функции help. |
Сердцем функции help является мощная функция dir. dir возвращает список атрибутов и методов произвольного объекта: модуля, функции, строки, списка, словаря… в общем, любого объекта.
Пример 2.8. Функция dir
>>> li = [] >>> dir(li) ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] >>> d = <> >>> dir(d) ['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values'] >>> import odbchelper >>> dir(odbchelper) ['__builtins__', '__doc__', '__file__', '__name__', 'buildConnectionString']
| li является списком, так что dir(li) дает список имен всех методов списка. Обратите внимание, что возвращаемый список содержит имена методов в виде строк, а не сами методы. | |
| d является словарем, поэтому dir(d) дает список имен методов словаря. Как минимум один из них, keys, вам уже знаком. | |
| Здесь начинается самое интересное. odbchelper является модулем, так что dir(odbchelper) дает список всех имен, определенных в модуле, включая специальные атрибуты, такие как __name__ и __doc__. В данном случае, odbchelper содержит одну пользовательскую функцию, buildConnectionString, которую мы изучали в главе Знакомство с языком Python. |
Наконец, функция callable возвращает 1, если аргумент может быть вызван, в противном случае возвращает 0. Вызов поддерживают такие объекты, как функции, методы и даже классы. (Более подробно о классах читайте в главе 3.)
Пример 2.9. Функция callable
>>> import string >>> string.punctuation '!"#$%&\'()*+,-./:;?@[\\]^_`<|>~' >>> string.join >>> callable(string.punctuation) 0 >>> callable(string.join) 1 >>> print string.join.__doc__ join(list [,sep]) -> string Return a string composed of the words in list, with intervening occurrences of sep. The default separator is a single space. (joinfields and join are synonymous)
| На смену большинству функций модуля string пришли методов строк (хотя многие до сих пор используют функцию join), но модуль также содержит множество полезных констант. Например string.punctuation содержит все стандартные символы пунктуации. | |
| Функция string.join объединяет строки списка в одну строку. | |
| string.punctuation является строкой и вызов не поддерживает. (Строки имеют методы, которые можно вызвать, но вы не можете вызвать саму строку.) | |
| string.join ялвляется функцией и поддерживает вызов с двумя аргументами. | |
| Любой объект, поддерживающий вызов, может иметь строку документации. Применяя функцию callable к каждому атрибуту объекта, мы можем определить, какие атрибуты представляют для нас интерес (методы, функции, классы), и какие можно игнорировать (константы и т. д.), не имея каких-либо начальных знаний об объекте. |
type, str, dir и другие втроенные функции языка Python сгруппированы в специальном модуле __builtin__ (обратите внимание на два символа подчеркивания в начале и два в конце). Встроенные функции доступны напрямую, как если бы интерпретатор при запуске автоматически выполнял from __builtin__ import *. Вы можете получить информацию о встроенных функциях (и других объектах) как об отдельной группе исследуя модуль __builtin__. Для этих целей у нас есть функция help. Попробуйте проделать это сейчас сами. Позже мы более подробно рассмотрим наиболее важные встроенные функции (некоторые классы исключений, например AttributeError, вам должны быть уже знакомы.)
Пример 2.10. Втроенные функции и другие объекты
>>> from apihelper import help >>> import __builtin__ >>> help(__builtin__, 20) ArithmeticError Base class for arithmetic errors. AssertionError Assertion failed. AttributeError Attribute not found. EOFError Read beyond end of file. EnvironmentError Base class for I/O related errors. Exception Common base class for all exceptions. FloatingPointError Floating point operation failed. IOError I/O operation failed. [. и т. д. . ]
| Python распространяется вместе с прекрасной документацией. Вам следует внимательно прочитать, чтобы заиметь представления о предоставляемых им возможностях. Но, в то время как при использовании большинства других языков вам необходимо все время возвращать к чтению документации (страниц man или, не дай Бог, MSDN), чтобы вспомнить, как использовать тот или иной модуль, Python в основном содержит эту документацию в себе. | |
- Python Library Reference описывает все встроенные функции и исключения.
Copyright © 2000, 2001, 2002 Марк Пилгрим
Copyright © 2001, 2002 Перевод, Денис Откидач
Функция dir() в Python
Функция dir() в Python пытается вернуть список допустимых атрибутов для данного объекта. Если аргумент не указан, он возвращает список имен в текущей локальной области.
dir([object])
Если объект содержит функцию __dir __(), то эта функция будет вызвана. Функция должна возвращать список атрибутов. Список имен атрибутов отсортирован в алфавитном порядке.
Давайте посмотрим на несколько примеров функции dir().
Без аргументов
print('\ndir() with no argument\n') print(dir())
dir() with no argument ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
Обратите внимание, что вывод зависит от программы и установки Python, поэтому не беспокойтесь, если в вашей системе он другой.
С кортежем и списком
print('\ndir() with tuple argument\n') t = (1, 2) print(dir(t)) print('\ndir() with list argument\n') l = [1, 2] print(dir(l))
dir() with tuple argument ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index'] dir() with list argument ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
Обратите внимание, что элементы в списке отсортированы по алфавиту.
С настраиваемым объектом
class Data: name = '' print('\ndir() with custom object argument\n') d = Data() print(dir(d))
dir() with custom object argument ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'id', 'name']
С объектом модуля
Давайте посмотрим на вывод функции dir() с объектом модуля, я использую namedtuple из модуля коллекций.
from collections import namedtuple n = namedtuple('Vowels', 'a,e,i,o,u') print('\ndir() with module object argument\n') print(dir(n))
dir() with module object argument ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '_asdict', '_fields', '_fields_defaults', '_make', '_replace', 'a', 'count', 'e', 'i', 'index', 'o', 'u']
Обратите внимание, что атрибуты модуля также возвращаются функцией dir().
С функцией __dir __()
Давайте определим класс с помощью функции __dir __() и посмотрим, вызывается ли он функцией dir() или нет.
class Color: def __dir__(self): print('__dir__() function called') return ['Red', 'Green', 'Blue'] print('\ndir() with __dir__ method defined in object\n') c = Color() print(dir(c))
dir() with __dir__ method defined in object __dir__() function called ['Blue', 'Green', 'Red']
Резюме
Python dir() – это удобная функция в Python для определения доступных атрибутов объекта или атрибутов локальной области видимости.