Python 属性为空的自定义类

Python 属性为空的自定义类,python,class,python-3.x,Python,Class,Python 3.x,在其第条中规定: 特殊属性:\uuuu name\uuuu是类名\uuuu module\uuuu是定义类的模块名称\uuuu dict\uuuu是包含类名称空间的字典\uuuu base\uuuu是一个元组(可能为空或单元组),包含基类,按照它们在基类列表中出现的顺序排列\uuuu doc\uuuu是类的文档字符串,如果未定义,则为None 那么,自定义类的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu可以“可能为空”吗?如果所有内容都隐式

在其第条中规定:

特殊属性:
\uuuu name\uuuu
是类名
\uuuu module\uuuu
是定义类的模块名称
\uuuu dict\uuuu
是包含类名称空间的字典
\uuuu base\uuuu
是一个元组(可能为空或单元组),包含基类,按照它们在基类列表中出现的顺序排列
\uuuu doc\uuuu
是类的文档字符串,如果未定义,则为
None

那么,自定义类的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
可以“可能为空”吗?如果所有内容都隐式继承自Python
3
中的
object
,那么如何实现这一点呢

只有
对象本身是空的
类:

>>> object.__bases__
()

我遗漏了什么吗?

这行代码在Python 3发布之前就已经存在了。这是2007年的情况。当对象模型被修改以摆脱旧式类时,文档中的信息似乎通过了审查,现在可能只是错误信息


我建议你提出一个问题来澄清它是否不正确/过时

该段落与其说是错误的,不如说是误导性的,因为它出现的地方:“自定义类”是数据模型文档中唯一一个处理
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。由于使用自定义类是您唯一可能关心
\uuuuuuuuu base\uuuuuuu
内容的时候,我想这是有道理的

令人惊讶的是,它给出了
\uuuuu base\uuuuu
的完整描述,包括仅适用于非自定义类的详细信息,如内置的
对象。正如您所指出的,
object.\uuuuuuuuuuuuuuuuuuuu
为空:

我认为这个短语应该是一个
未知类的提示。
可以产生一个
索引器,因为即使在Python3中,
基也可以是空的

显然,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
也可以是单身。我无法想象为什么会有人关心这件事。也许“singleton”的意思是“1元组”?呃,好的。。。我还是不在乎

更新:由于,该段落于2007年8月15日(星期三)与一起导入,自那时起基本保持不变。然而,它所在的部分在当时只是“类”。该节于2007年8月31日星期五举行,作为消除“旧式”/“新式”区别的努力的一部分

添加“Custom”一词似乎并不是一种改进,因为该部分的大部分内容适用于大多数或可能所有类(我不知道它在多大程度上适用于从另一种语言编译的类)

PS:如果有人想在创建类后偷偷地替换
\uuuu base\uuuu
属性,Python 3会有一条专门为您准备的特殊错误消息

>>> 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 ()
>A类:合格
...
>>>A.._u基地__
(,)
>>>A..uuu基uuu=()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:只能将非空元组分配给..\uuuuuuuuuuuu,而不是()

这看起来像是在启动Python
3
时未删除的文档中的遗漏<代码>类Foo:pass
在Python中
2.x
Foo生成
()
。\uuuuu base\uuuu
。当然,我只是猜测;我不知道这里是否有任何黑魔法,允许您在
Py3
中定义一个带有空
\uuuuu base\uuuuu
的类。Git Hub不会显示或命名该提交的所有(400多个)文件。引述的段落是英文的。
>>> 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 ()