Get“super():no arguments”错误出现在一种情况下,但不是类似的CA

2024-10-01 09:41:16 发布

您现在位置:Python中文网/ 问答频道 /正文

class Works(type):
    def __new__(cls, *args, **kwargs):
        print([cls,args]) # outputs [<class '__main__.Works'>, ()]
        return super().__new__(cls, args)

class DoesNotWork(type):
    def __new__(*args, **kwargs):
        print([args[0],args[:0]]) # outputs [<class '__main__.doesNotWork'>, ()]
        return super().__new__(args[0], args[:0])

Works() # is fine
DoesNotWork() # gets "RuntimeError: super(): no arguments"

据我所知,在这两种情况下,super.\u new_uu接收类文本作为第一个参数,而一个空元组作为第二个参数。在

那么为什么一个错误,另一个错误呢?在


Tags: new参数returnmaindeftypeargsoutputs
1条回答
网友
1楼 · 发布于 2024-10-01 09:41:16

super的零参数形式要求包含它的方法有一个显式的(即非varargs)第一个参数。这是由an older version of the docs提出的(加上强调):

The zero argument form automatically searches the stack frame for the class (__class__) and the first argument.

出于某种原因,在以后的文档版本中删除了此注释。(可能值得提出一个doc错误,因为文档对零参数super是如何工作的以及它需要什么来工作非常模糊。)

另请参见this Python bug report(这是未解决的,即使是一个bug也不能明确接受)。结果是零参数super是魔术,在某些情况下这种魔术失败了。正如bug报告中建议的那样,如果只接受vararg,则需要使用显式的双参数形式super。在

相关问题 更多 >