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
可以“可能为空”吗?如果所有内容都隐式继承自Python3
中的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,而不是()
这看起来像是在启动Python3
时未删除的文档中的遗漏<代码>类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 ()