Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我无法在python2.X中初始化多重继承中不同类的数据成员_Python_Python 2.7_Python 3.x_Method Resolution Order - Fatal编程技术网

我无法在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