在Python中,总是被告知dir
列出了其可疑对象的任何属性。但是为什么__dict__
中没有dir("an imported module")
?
答案 0 :(得分:1)
您不能依靠dir([object])
返回准确的结果。如here所述:
如果对象具有名为
__dir__()
的方法,则该方法将为 调用,并且必须返回属性列表。这允许对象 实现自定义__getattr__()
或__getattribute__()
的 函数来定制dir()
报告其属性的方式。如果对象不提供
__dir__()
,则该函数尝试其 最好从对象的__dict__
属性中收集信息,如果 定义,并从其类型对象。结果列表不是 必定是完整的,并且当对象具有 自定义__getattr__()
。
因此,请尝试查看您要从中获取信息的对象,然后自行查找属性。
答案 1 :(得分:0)
答案在python documentation for the dir
function中:
注意:由于
dir()
主要是为了方便用户在交互式提示中使用而提供的,因此它提供的是一组有趣的名称,而不是严格或一致地提供定义的名称集,其详细行为可能会随版本而变化。例如,当参数为类时,元类属性不在结果列表中。
__dict__
是该异常的一部分的特殊属性。
答案 2 :(得分:0)
dir()
不仅会查找对象的__dict__
(有时甚至不存在),还会使用对象的遗产(其类或类型,以及任何超类或父对象,类或类型),以便为您提供所有可用属性的完整图片。
实例__dict__
只是该实例上的“本地”属性集,并不包含该实例上可用的每个属性。相反,您还需要查看类和类的继承树。