关于python:对python2 / 3的super()的兼容调用

back compatible call to super() for python2/3

本问题已经有最佳答案,请猛点这里访问。

我有一些代码需要在python 2和3中运行。我有一节课

1
2
class myClass:
  def __init__(self):

带着孩子。我已经尝试过:

1
2
3
4
  from myClassfile import myClass as myBaseClass
  class myClass(myBaseClass):
          def __init__(self):
              super().__init__()

但由于已知的python2/3差异,它失败了。我遵循了typeerror:super()至少接受1个参数(给定0个参数),错误是特定于任何Python版本的?

直到:

1
2
3
4
5
from myClassfile import myClass as myBaseClass
class myClass(myBaseClass):

  def __init__(self):
      super(myClass,self).__init__()

但这仍然失败,因为:

1
TypeError: super() argument 1 must be type, not classobj

在python 2中,类必须从object继承,才能成为新的样式类:

1
2
class myClass(object):
    def __init__(self):

在python 3中,这可能完成,也可能不完成——这没有什么区别。

由于在您的代码中,myClass继承自myBaseClass,您应该确保myBaseClass继承自对象:

1
2
3
4
5
6
class myBaseClass(object):
    ...

class myClass(myBaseClass):
    def __init__(self):
        super(myClass, self).__init__()