如何从多个父类继承相同的名称变量?

时间:2017-04-21 00:49:20

标签: python inheritance method-resolution-order

我遇到了一些关于python多重继承的问题。

class TestFather(object):
    fathers = {}
    path = "/C"

    def __init__(self):
        super(TestFather, self).__init__()
        # self.fathers = file_to_dict(self.path)


class TestMother(object):
    mothers = {}
    path = "/D"

    def __init__(self):
        super(TestMother, self).__init__()
        # self.mothers = file_to_dict(self.path)


class TestChild(TestFather, TestMother):
    def __init__(self):
        super(TestChild, self).__init__()


t = TestChild()
help(t)

变量路径将存储母亲和父亲的文件目录。当我打印出父亲和母亲的词典时,我注意到母亲词典以某种方式从父亲那里获取所有信息。通过阅读Guido的MRO博客http://python-history.blogspot.com/2010/06/method-resolution-order.html并观看Raymond Hettinger的2015 PyCon视频超级超级,我意识到TestChild类只从TestFather继承路径变量,并完全忽略路径变量来自TestMother。

我的问题是,TestChild是否有办法使用其两个父母'相应的路径,而不是仅采用具有更高MRO的那个。我知道更改变量名称将起到作用,但正如雷蒙德所说,必须有更好的方法。

1 个答案:

答案 0 :(得分:0)

TestChild无法隐式继承两者,因为明显的名称冲突:TestChild.path不能同时具有两个值。由于您还没有描述TestChild访问这两个值所需的语义,因此我不确定您真正需要什么样的解决方案。

但是,你可以扩展 __ init __ 函数,将你的名字存储在TestChild中 - 也许是两个字符串的列表?