我有一个多级继承(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))