小编典典

TypeError:super()至少接受1个参数(给定0)错误是特定于任何python版本的吗?

python

我收到这个错误

TypeError:super()至少接受1个参数(给定0)

在python2.7.11上使用以下代码:

class Foo(object):
    def __init__(self):
        pass

class Bar(Foo):
    def __init__(self):
        super().__init__()

Bar()

使它工作的解决方法是:

class Foo(object):
    def __init__(self):
        pass

class Bar(Foo):
    def __init__(self):
        super(Bar, self).__init__()

Bar()

似乎语法是特定于python 3的。那么,在2.x和3.x之间提供兼容代码并避免发生此错误的最佳方法是什么?


阅读 123

收藏
2020-12-20

共1个答案

小编典典

是的,0参数语法特定于Python 3,请参阅 Python
3.0
PEP 3135的
新增功能
-New
Super

在Python 2和必须跨版本兼容的代码中,只需坚持明确地传入类对象和实例即可。

是的,有可用的“反向移植”使super()Python
2(例如future库)可以使用无参数版本,但是这些都需要大量的技巧,包括对类层次结构进行全面扫描以找到匹配的函数对象。这既脆弱又缓慢,根本不值得“带来便利”。

2020-12-20