2

我遇到了一些关于 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 的路径。我知道更改变量名可以解决问题,但正如 Raymond 所说,必须有更好的方法。

4

1 回答 1

0

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

但是,您可以扩展__init__函数,在 TestChild 中存储您喜欢的名称——也许是两个字符串的列表?

于 2017-04-21T01:38:26.430 回答