python2/3 向后兼容调用 super()
back compatible call to super() for python2/3
我有一些代码需要在 Python 2 和 3 中 运行。
我有一个 class
class myClass:
def __init__(self):
与 child。我试过:
from myClassfile import myClass as myBaseClass
class myClass(myBaseClass):
def __init__(self):
super().__init__()
但由于已知 python2/3 差异,它失败了。
我已关注
直到:
from myClassfile import myClass as myBaseClass
class myClass(myBaseClass):
def __init__(self):
super(myClass,self).__init__()
但这仍然失败,原因是:
TypeError: super() argument 1 must be type, not classobj
在 Python 2 中,class 必须继承自 object
才能成为 new-style-class:
class myClass(object):
def __init__(self):
在 Python 3 中,可以完成也可以不完成 - 这没有区别。
因为在您的代码中 myClass
继承自 myBaseClass
,您应该确保 myBaseClass
继承自对象:
class myBaseClass(object):
...
class myClass(myBaseClass):
def __init__(self):
super(myClass, self).__init__()
我有一些代码需要在 Python 2 和 3 中 运行。 我有一个 class
class myClass:
def __init__(self):
与 child。我试过:
from myClassfile import myClass as myBaseClass
class myClass(myBaseClass):
def __init__(self):
super().__init__()
但由于已知 python2/3 差异,它失败了。
我已关注
直到:
from myClassfile import myClass as myBaseClass
class myClass(myBaseClass):
def __init__(self):
super(myClass,self).__init__()
但这仍然失败,原因是:
TypeError: super() argument 1 must be type, not classobj
在 Python 2 中,class 必须继承自 object
才能成为 new-style-class:
class myClass(object):
def __init__(self):
在 Python 3 中,可以完成也可以不完成 - 这没有区别。
因为在您的代码中 myClass
继承自 myBaseClass
,您应该确保 myBaseClass
继承自对象:
class myBaseClass(object):
...
class myClass(myBaseClass):
def __init__(self):
super(myClass, self).__init__()