谁能用充分的例子向我解释一下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
发布于 2011-07-20 19:45:16
通过定义__dir__()
,dir()
允许您自定义对象报告的属性。
在手册中,如果未定义__dir__()
:
如果对象是模块对象,则列表包含模块属性的名称。
如果对象是类型或类对象,则该列表包含其属性的名称,并以递归方式包含其基属性的名称。
否则,该列表包含对象的属性名称、其类的属性的名称以及其类的基类的递归属性的名称。
这也是inspect.getmembers()
返回的内容,只不过它返回的是(name, attribute)
的元组,而不仅仅是名称。
object.__dict__
是{key: attribute, key2: atrribute2}
等形式的字典。
object.__dict__.keys()
拥有其他两个所缺少的东西。
来自inspect.getmembers()
上的文档
当参数是类时,dir getmembers()不返回元类属性(此行为继承自
()函数)。
对于int.__dict__.keys()
,这是
['__setattr__', '__reduce_ex__', '__reduce__', '__class__', '__delattr__', '__subclasshook__', '__sizeof__', '__init__']
总而言之,dir()
和inspect.getmembers()
基本上是相同的,而__dict__
是包含元类属性的完整名称空间。
https://stackoverflow.com/questions/6761106
复制相似问题