python中具有相同名称的函数的子类

时间:2018-03-16 14:08:20

标签: python class oop

我在python中有两个类,第三个继承自前两个类:

class A():
    def __init__(var1, var2):
        self.var1 = var1
        self.var2 = var2
    def MyFunc():
        #do stuff
class B():
   def __init__(var1):
        self.var1 = var1
    def MyFunc():
        #do other stuff

class C(A,B):
    def __init__(self, var1, var2, var3)
        A.__init__(self,var1, var2)
        B.__init__(self, var3)

您可能会注意到这两个类具有相同名称的不同功能。执行以下操作:

>>> classC = C(1,2,3)
>>> classC.MyFunc()

似乎工作但我想确定我正在调用哪个MyFunc函数。如何控制调用子类中的哪个函数?

1 个答案:

答案 0 :(得分:5)

使用C的方法解析顺序搜索C未定义的属性:

>>> C.__mro__
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)

由于未定义C.MyFuncclassC.MyFunc会解析为A.MyFunc。永远不会调用B.MyFunc,除非A.MyFunc由于某种原因明确地调用它。