我试图理解dir()
是如何运作的,我正在阅读文档,但我仍有一些疑问。
来自doc:
默认
dir()
机制对不同类型的对象的行为有所不同,因为它试图产生最相关的信息,而不是完整的信息:
- 如果对象是模块对象,则列表包含的名称 模块的属性。
- 如果对象是类型或类对象,则列表包含其属性的名称,并且递归地包含其属性 碱基。
- 否则,该列表包含对象的属性'名称,类的属性名称,以及属性的递归 它的类的基类。
因为我不理解第二个和第三个之间的区别,所以我在交互式提示上做了一些实验:
>>> type(list)
<class 'type'>
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__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']
>>> type([])
<class 'list'>
>>> dir([])
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__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']
我不理解,我给出了一个类型对象(dir(list)
),如果我给出一个列表对象(dir([])
),我会得到相同的列表,那么&# 39;继续?
答案 0 :(得分:2)
list
实例(例如由文字[]
创建的空列表对象)具有与list
类相同的属性,因此您从{{获得相同的列表1}}。但是,由于您可以在Python中动态地向(某些)对象实例添加属性,但情况并非总是如此,因此在文档中进行了区分。这是一个示例,其中实例具有类不具有的属性:
dir()
答案 1 :(得分:0)
第二项专门指类型或类别;这使得第三项涵盖了类型或类的实例。
请注意,dir
类的A
输出的最后一行与a
的最后一行相比,A
的实例。 a
的属性y
A
没有。 (为了便于阅读,我将输出分成多行。)
>>> class A(object):
... x = 3
... def __init__(self, b):
... self.y = b
...
>>> a = A(6)
>>> dir(A)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__',
'__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__',
'x']
>>> dir(a)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__',
'__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__',
'x', 'y']
>>>