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接收类文本作为第一个参数,而一个空元组作为第二个参数。在
那么为什么一个错误,另一个错误呢?在
super
的零参数形式要求包含它的方法有一个显式的(即非varargs)第一个参数。这是由an older version of the docs提出的(加上强调):出于某种原因,在以后的文档版本中删除了此注释。(可能值得提出一个doc错误,因为文档对零参数
super
是如何工作的以及它需要什么来工作非常模糊。)另请参见this Python bug report(这是未解决的,即使是一个bug也不能明确接受)。结果是零参数
super
是魔术,在某些情况下这种魔术失败了。正如bug报告中建议的那样,如果只接受vararg,则需要使用显式的双参数形式super
。在相关问题 更多 >
编程相关推荐