我收到这个错误
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之间提供兼容代码并避免发生此错误的最佳方法是什么?
是的,0参数语法特定于Python 3,请参阅 Python 3.0 和PEP 3135的 新增功能 -New Super 。
在Python 2和必须跨版本兼容的代码中,只需坚持明确地传入类对象和实例即可。
是的,有可用的“反向移植”使super()Python 2(例如future库)可以使用无参数版本,但是这些都需要大量的技巧,包括对类层次结构进行全面扫描以找到匹配的函数对象。这既脆弱又缓慢,根本不值得“带来便利”。
super()
future