如何在python 2.7.13中使用super()调用基类函数?



我有一个多级继承(A->B->C(。在基类中,我有一个名为"my_dict"的字典变量。从派生类中,我通过 super((.add_to_dict(( 调用基类函数来添加一些值。

下面的代码在python 3.7中按预期工作。但是在Python 2.7.13中,它会抛出错误。有人可以帮我修复 2.7.13 吗?

from collections import OrderedDict
class A():
def __init__(self):
self.my_dict = OrderedDict()
def add_to_dict(self):
self.my_dict["zero"]=0
self.my_dict["one"]=1 

class B(A):
def add_to_dict(self):
super().add_to_dict()
self.my_dict["two"]=2
def print_dict(self):
print("class B {}".format(my_dict))

class C(B):
def add_to_dict(self):
super().add_to_dict()
self.my_dict["three"]=3
def print_dict(self):
print("class C {}".format(self.my_dict))
obj = C()
obj.add_to_dict()
obj.print_dict()

输出 ( 2.7.13(:

文件"test.py",第 15 行,add_to_dict 超级((.add_to_dict((

类型错误:super(( 至少需要 1 个参数(给定 0(

输出(python 3.7(

C 类 OrderedDict([('zero', 0(, ('one', 1(, ('two',2(, ('three', 3(](

在 py2 中,您可以使用super(<Class>, <instance>).<function>().这些也必须是"新风格"类。这些是通过从object继承来定义的。

因此,在您的情况下,正确的代码应该是:

class A(object):
def __init__(self):
self.my_dict = OrderedDict()
def add_to_dict(self):
self.my_dict["zero"]=0
self.my_dict["one"]=1

class B(A):
def add_to_dict(self):
super(B, self).add_to_dict()
self.my_dict["two"]=2
def print_dict(self):
print("class B {}".format(my_dict))

class C(B):
def add_to_dict(self):
super(C, self).add_to_dict()
self.my_dict["three"]=3
def print_dict(self):
print("class C {}".format(self.my_dict))

最新更新