Сообщить об ошибке.

Функция dir() в Python, все атрибуты объекта

Возвращает список допустимых атрибутов объекта

Синтаксис:

dir(object)

Параметры:

  • object - объект языка Python, для которого следует вернуть имена атрибутов.

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

  • list - список имён (атрибутов) в алфавитном порядке.

Описание:

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

Если объект имеет метод с именем __dir__(), этот метод будет вызван и вернет список атрибутов. Это позволяет объектам, реализующим пользовательскую функцию __getattr__() или __getattribute__(), настраивать способ представления своих атрибутов для функции dir().

Если объект не предоставляет метод __dir__(), то функция делает все возможное, чтобы собрать информацию из атрибута __dict__ объекта, если он определен, и из объекта типа. Результирующий список не обязательно является полным и может быть неточным, если объект имеет пользовательский __getattr__().

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

  1. Если объект является модулем, список будет содержать имена атрибутов модуля;
  2. Если объект является типом или классом, список будет содержать имена атрибутов данного объекта и его родителей (вычисляются рекурсивно).
  3. В других случаях список будет содержать имена атрибутов самого объекта, его класса, и классов-родителей (вычисляются рекурсивно).

Функция 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']