dir()
允许您通过定义来自定义对象报告的属性__dir__()
.
从手册来看,如果__dir__()
没有定义:
如果该对象是模块对象,则列表包含模块属性的名称。
如果对象是类型或类对象,则列表包含其属性的名称以及其基的属性的递归名称。
否则,该列表包含对象的属性名称、其类的属性名称以及其类的基类的属性的递归名称。
这也是inspect.getmembers()
返回,除了它返回元组(name, attribute)
而不仅仅是名字。
object.__dict__
是一个形式的字典{key: attribute, key2: atrribute2}
etc.
object.__dict__.keys()
拥有其他两个所缺乏的东西。
从文档开始inspect.getmembers()
:
当参数是类时,getmembers() 不返回元类属性(此行为继承自 dir() 函数)。
For int.__dict__.keys()
, 这是
['__setattr__', '__reduce_ex__', '__reduce__', '__class__', '__delattr__', '__subclasshook__', '__sizeof__', '__init__']
总而言之,dir()
and inspect.getmembers()
基本相同,同时__dict__
是包括元类属性的完整命名空间。