首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有空__bases__属性的自定义类

带有空__bases__属性的自定义类
EN

Stack Overflow用户
提问于 2016-11-19 19:31:05
回答 2查看 273关注 0票数 5

在关于自定义类 of https://docs.python.org/3/reference/的一节中指出:

特殊属性:__name__是类名;__module__是定义类的模块名;__dict__是包含类名称空间的字典;__bases__是包含基类的元组(可能为空类或单例),按基类列表中它们出现的顺序排列;__doc__是类的文档字符串,如果未定义,则为None

那么,定制类的__bases__可以“可能是空的”吗?如果所有东西都隐式地继承了Python中的object,那么如何实现这一点呢?

唯一具有空__bases__的类是object本身:

代码语言:javascript
运行
复制
>>> object.__bases__
()

我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-23 03:32:22

在Python 3发布之前,这一行就已经存在了。这是2007年的提交。当对象模型被修改以摆脱旧风格的类时,看起来文档中的信息似乎通过了评审,现在很可能只是错误的信息。

我可以建议你提出一个文件问题,以澄清它是否不正确/过时。

票数 2
EN

Stack Overflow用户

发布于 2016-11-23 03:38:12

这一段与其说是错误的,不如说是误导性的,因为“自定义类”是数据模型文档中处理__bases__的唯一地方。由于使用自定义类是您唯一可能关心__bases__内容的时候,我想这是有意义的。

令人惊讶的是,它给出了__bases__的完整描述,包括仅适用于非自定义类的细节,比如内置的object。正如您所指出的,object.__bases__是空的:

代码语言:javascript
运行
复制
>>> object.__bases__
()

我认为这个短语应该是unknown_class.__bases__[0]可以提出IndexError的提醒,因为即使在Python3中,__bases__也可能是空的。

显然,__bases__也可以是单身人士。为什么有人会在乎这个,我无法想象。也许他们所说的“单身”是指“一元组”?呃,好吧..。我还是不在乎。

更新: As 韦姆指出,该段落是在2007年8月15日随Docs/reference/datamodel.rst一起导入的,自那以后基本保持不变。然而,它所在的部分只是当时的“类”。这一部分是重命名为“自定义类”在2007年8月31日星期五,作为努力消除“旧风格”/“新风格”区别的一部分。 添加“定制”一词似乎并不是一种改进,因为该部分的大部分内容适用于大多数或所有类(我不知道它在多大程度上适用于从另一种语言编译的类)。

PS:如果有人想在类创建后偷偷地替换__bases__属性,Python3只会为您提供一条特殊的错误消息.

代码语言:javascript
运行
复制
>>> class A: pass
...
>>> A.__bases__
(<class 'object'>,)
>>> A.__bases__ = ()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only assign non-empty tuple to A.__bases__, not ()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40697047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档