在python中具有相同名称的函数的子类 [英] subclasses with functions having the same name in python

查看:249
本文介绍了在python中具有相同名称的函数的子类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在python中有两个类,第三个是从前两个继承的:

I have two classes in python, and a third which inherits from the first two:

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)

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

As you might notice both classes have different functions bearing the same name. Doing the following:

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

似乎可以工作,但是我想确定我正在调用哪个MyFunc函数.如何控制子类中的哪个函数被调用?

Appears to work but I would like to be sure of which MyFunc function I am calling. How do I control which function from my subclasses is being called?

推荐答案

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

Attributes not defined by C are searched for using C's method resolution order:

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

由于未定义C.MyFunc,因此classC.MyFunc解析为A.MyFunc.除非A.MyFunc由于某种原因明确地调用它,否则从不调用B.MyFunc.

Since C.MyFunc isn't defined, classC.MyFunc resolves to A.MyFunc. B.MyFunc is never called, unless A.MyFunc were to call it explicitly for some reason.

这篇关于在python中具有相同名称的函数的子类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆