任何人都可以用适当的例子向我解释一下b / w
的区别>>> import inspect
>>> inspect.getmembers(1)
和
>>> type(1).__dict__.items()
和
>>> dir(1)
除了他们显示减少的属性数量&按此顺序排列的方法。 1是整数(但它可以是任何类型。)
修改
>>>obj.__class__.__name__ #gives the class name of object
>>>dir(obj) #gives attributes & methods
>>>dir() #gives current scope/namespace
>>>obj.__dict__ #gives attributes
答案 0 :(得分:21)
dir()
允许您通过定义__dir__()
来自定义对象报告的属性。
从手册中,如果未定义__dir__()
:
如果对象是模块对象,则列表包含模块属性的名称。
如果对象是类型或类对象,则列表包含其属性的名称,并且递归地包含其基础的属性。
否则,列表包含对象的属性名称,类的属性名称,以及类的基类属性的递归。
这也是inspect.getmembers()
返回的内容,除了它返回(name, attribute)
的元组而不仅仅是名称。
object.__dict__
是{key: attribute, key2: atrribute2}
等形式的字典
object.__dict__.keys()
有其他两个缺乏的东西。
来自inspect.getmembers()
上的文档:
当参数是一个类时,getmembers()不返回元类属性(此行为继承自dir()函数)。
对于int.__dict__.keys()
,这是
['__setattr__', '__reduce_ex__', '__reduce__', '__class__', '__delattr__', '__subclasshook__', '__sizeof__', '__init__']
总结一下,dir()
和inspect.getmembers()
基本相同,而__dict__
是包含元类属性的完整命名空间。