【问题标题】:List all the elements in a python namespace列出 python 命名空间中的所有元素
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多