我无法在python2.X中初始化多重继承中不同类的数据成员
我有一个这样的代码我无法在python2.X中初始化多重继承中不同类的数据成员,python,python-2.7,python-3.x,method-resolution-order,Python,Python 2.7,Python 3.x,Method Resolution Order,我有一个这样的代码 class a(object): def __init__(self, x, y): self.x=x self.y=y super(a, self).__init__() def displayA(self): print self.x print self.y class b(object): def __init__(self, name): se
class a(object):
def __init__(self, x, y):
self.x=x
self.y=y
super(a, self).__init__()
def displayA(self):
print self.x
print self.y
class b(object):
def __init__(self, name):
self.name=name
super(b, self).__init__()
def displayB(self):
print self.name
class c(a,b):
def __init__(self, p,x,y,name):
self.p = p
b.name=name #**this line confuses me**
super(c,self).__init__(x,y)
def displayC(self):
print self.p
v = c(10, 12, 78, 'abc')
v.displayC()
v.displayA()
v.displayB()
我想通过子类c初始化不同类(a&b)的数据成员,但super()只访问类a,但我可以在c的init()中初始化类b数据成员,如b.name=name
,然后我可以在对象中传递参数。
我的问题是,如果我不这样做,我不能在c的对象中传递参数。
救救我 试试看:
a.__init__(self,x,y)
b.__init__(self,name)
编辑:
好的,错过了关于b.name
的问题。拆下那条线。在此上下文中,b是类b._init__
是一种特殊的约定,用于显示您愿意调用哪个父构造函数
这不是重复的。希望,现在它有帮助
编辑2:
结果:
a 12 - 78
b abc
10
12
78
abc
你能编辑你的第一篇文章,告诉我问题出在哪里吗?对我来说,这就是答案,这是从起点开始的…你能告诉我为什么b.name=name有效吗?我对此感到困惑,但是'nt ClassName\uuuu init\uuuu(),是调用构造函数的旧方法吗?我听过一个叫做“合作子类化”的术语,其中我们必须在每个类中声明超类,但我的问题仍然完好无损!我不能用c类对象初始化b类的构造函数我只想在super()的帮助下从子类构造函数(c类)初始化超类构造函数(a类和b类),但我能找到的是,它只初始化了第一个类构造函数(即a类),而不是第二个类(b类)。你所做的一切都很好,我能理解你写的代码。我想问的是,像你这样的初始化方法是否仍在实践中(我在某个地方读到过,这是一种更古老的方法)?或者还有其他方法可以用super()做同样的事情吗@Michal Zaborowski
super()
提供了更大的灵活性,因为您不需要手动对其进行检测。然而,这里有不同的参数集,它不会工作…你说的是,唯一的方法是,按照你的方式做?
a 12 - 78
b abc
10
12
78
abc