Допустим, у вас есть класс Person
class Person:
name = "Samuel"
age = 50
country = "India"
def method1(self):
print("Method 1")
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__',
'age', 'country', 'method1', 'name']
То, что вы можете видеть из вышеприведенного вывода, таково, чтоон возвращает отсортированный список допустимых атрибутов для этого объекта. Если вы посмотрите на класс Person :
имя, возраст, страна являютсяатрибуты и method1 является методом этого класса.Следовательно, когда вы используете dir (Person), он отобразит все атрибуты этого класса.
Механизм dir () по умолчанию ведет себя по-разному с различными типами объектов, так как он пытается создать наиболее релевантный, а неполная информация:
- Если объект является объектом модуля, список содержит имена атрибутов модуля.
- Если объект является объектом типа или класса, список содержитимена его атрибутов и рекурсивные атрибуты его баз.
- В противном случае список содержит имена атрибутов объекта, имена атрибутов его класса и рекурсивно атрибуты базовых классов его класса.
Например,
a = [1,2,3,45]
print(dir(a))
Будет напечатано:
['__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']
Здесь вы можете увидеть несколько других имен атрибутов insert, pop,удалить и т. д. Если вы проверите с предыдущим списком, они не присутствовали. Это потому, что разные типы объектов имеют разные атрибуты , и с этими атрибутами вы можете использовать эти объекты в разных формах.Вы можете использовать a.pop(2)
для удаления элемента и т. Д.
len Я полагаю, относится к len ()
Как правило, len()
- этообщедоступный интерфейс, который вы используете, чтобы получить длину объекта.Метод __len__
- это реализация, которую должен реализовать объект, поддерживающий концепцию длины.len()
вызывает __len__()
Я думаю, что я вижу некоторые функции-члены в возвращенном списке атрибутов, len Я предполагаю, что относится к len (), но что это за вседругие вещи в списке?
Посетите следующую ссылку, https://docs.python.org/3.6/reference/datamodel.html#object.dir. Большинство из них перечислены здесь.Там также описано использование.