我遇到了一些关于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的那个。我知道更改变量名称将起到作用,但正如雷蒙德所说,必须有更好的方法。
答案 0 :(得分:0)
TestChild无法隐式继承两者,因为明显的名称冲突:TestChild.path不能同时具有两个值。由于您还没有描述TestChild访问这两个值所需的语义,因此我不确定您真正需要什么样的解决方案。
但是,你可以扩展 __ init __ 函数,将你的名字存储在TestChild中 - 也许是两个字符串的列表?