Jib*_*bin 26 python namespaces
任何人都可以用适当的例子向我解释是否存在差异
>>> import inspect
>>> inspect.getmembers(1)
Run Code Online (Sandbox Code Playgroud)
和
>>> type(1).__dict__.items()
Run Code Online (Sandbox Code Playgroud)
和
>>> dir(1)
Run Code Online (Sandbox Code Playgroud)
除了它们按顺序显示减少数量的属性和方法.1是整数(但它可以是任何类型.)
编辑
>>>obj.__class__.__name__ #gives the class name of object
>>>dir(obj) #gives attributes & methods
>>>dir() #gives current scope/namespace
>>>obj.__dict__ #gives attributes
Run Code Online (Sandbox Code Playgroud)
agf*_*agf 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__']
Run Code Online (Sandbox Code Playgroud)
总结一下,dir()并且inspect.getmembers()基本相同,而__dict__完整的命名空间包括元类属性.
| 归档时间: |
|
| 查看次数: |
5988 次 |
| 最近记录: |