说我有以下
class ClassA (object):
def meth1() ..
class ClassB (ClassA):
def meth1() ..
def meth2() ..
def meth3() ..
class ClassC (ClassB):
calls meth2() and meth(3)
我正在尝试重构ClassC,使其继承自ClassA。但是,ClassC使用了ClassB中我不想重写的两个重要方法,它们必须保持在ClassB下。另外,我不希望ClassB中的meth1被ClassB覆盖。 有没有办法从ClassC中的ClassB调用meth2和meth3,并使ClassC继承ClassA并使用ClassA中的meth1? 我希望我的解释清楚。如果你指导我一些关于此的文档,我将不胜感激。
答案 0 :(得分:1)
让ClassC
成为的子类 ClassA
和ClassB
:
class ClassC (ClassA, ClassB):
#calls meth2() and meth3()
ClassC().meth1()
会调用ClassA' meth1
,而ClassC().meth2()
和ClassC().meth3()
会调用ClassB
的方法,因为方法不是在ClassC
中定义的是looked-up in the base classes in order。
搜索基类的顺序由方法分辨率顺序(MRO)决定。有关MRO的更多信息,请参阅Michele Simionato's article和Shalabh Chaturvedi's article。
答案 1 :(得分:0)
如果这些方法绝对需要保留在原来的类下,我可能会继续使用多重继承,但我可能需要更多关于项目细节的信息才能这么说。
class ClassC(ClassA, ClassB):
... code here ...