Функция dir()
возвращает список доступных атрибутов для заданного объекта. Если аргумент не указан, то возвращается список имен из текущей локальной области.
Синтаксис функции:
dir([object])
Если объект содержит функцию __dir__()
, то будет вызвана эта функция. Функция должна возвращать список атрибутов. Имена атрибутов отсортированы в алфавитном порядке.
Рассмотрим примеры:
Пример без ввода аргументов:
print(dir())
Результат:
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
Пример со списком и кортежем:
num_list = [1, 2, 3, 4]
num_tuple = (1, 2, 3, 4)
print(dir(num_list), dir(num_tuple))
Результат:
['__add__', '__class__', '__class_getitem__', '__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'] ['__add__', '__class__', '__class_getitem__', '__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']
Пример с классом:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
print(dir(Person))
Результат:
['__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__']
Если у объекта есть метод __dir__()
, этот метод будет вызван и вернет список атрибутов. Это позволяет объектам, реализующим пользовательскую функцию __getattr__()
или __getattribute__(),
настраивать способ представления своих атрибутов функции dir()
.
Если объект не предоставляет метод __dir__()
, функция делает все возможное для сбора информации из атрибута __dict__
объекта, если он существует, и из типа object. Результирующий список не обязательно является полным и может быть неточным, если объект имеет пользовательский __getattr__()
.
Пример с методом __dir__()
class Person:
def __dir__(self):
return ['name', 'age']
p = Person()
print(dir(p))
Результат:
['age', 'name']