2016-01-18 31 views
0

Python类包含命名空间,函数dir列出命名空间的内容。列出python命名空间中的所有元素

object命名空间包含几个函数,例如函数__subclasses__,它们在调用时会返回一个包含所有已知类的列表,该列表是object的子类。

dir(object)输出是:

['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', 
'__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__setattr__', '__sizeof__', '__str__', '__subclasshook__'] 

__subclasses__功能还没有上市,但它的存在,尝试:object.__subclasses__()

我明白,一个类可以改变__dir__字典定制什么dir显示,但是这不是object的情况下,实际上object.__dir__抛出一个例外。

不过,当我使用IPython自动完成时,__subclasses__函数就在那里。我如何获得IPython使用的相同元素列表,以便我知道__subclasses__也在那里?

+1

“Python类只是命名空间” - 不是它们不是。 – user2357112

+0

@ user2357112:你能详细说一下吗?从python文档[这里](https://docs.python.org/2/tutorial/classes.html)我读到:*当类定义保持正常(通过结束)时,创建一个类对象。这基本上是由类定义创建的名称空间的内容的一个包装; * –

+0

虽然类对象包装类声明的名称空间,但说一个类只是一个名称空间,就像说人类只是左腿。命名空间只是该类的一部分。 – user2357112

回答

2

IPython通过完全普通的方式找到__subclasses__,查看type(object)。另一方面,因为object是一种类型,所以dir for types具体不看type(object)。谁写了dir决定在列表中看到元类的属性会令人困惑。

相关问题