【发布时间】:2016-04-24 00:03:27
【问题描述】:
Python 类包含命名空间,函数dir 列出命名空间的内容。
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__ 也存在?
【问题讨论】:
-
“Python 类只是命名空间”——不,它们不是。
-
@user2357112:你能详细说明一下吗?从 python 文档here 我读到:当一个类定义正常离开时(通过结尾),一个类对象被创建。这基本上是对类定义创建的命名空间内容的包装;
-
虽然类对象确实包装了类语句的命名空间,但说一个类只是一个命名空间就像说人类只是一条左腿。命名空间只是类的一部分。
-
@user2357112:这是有道理的,但人类甚至“基本上都不是左腿的包裹物”。我知道说“它只是”在语义上是有偏见的,但是根据文档,命名空间应该是它的普遍组件。
-
@user2357112:顺便说一句,你是对的,所以我会改进这个问题,谢谢;)
标签: python function class namespaces