Python:如何区分继承的方法

Adr*_*thy 4 python oop inheritance

新手Python问题.我有一个继承自几个类的类,一些特化类覆盖了基类中的一些方法.在某些情况下,我想调用非专业方法.这可能吗?如果是这样,语法是什么?

class Base(object):
    def Foo(self):
        print "Base.Foo"

    def Bar(self):
        self.Foo()  # Can I force this to call Base.Foo even if Foo has an override?


class Mixin(object):
    def Foo(self):
        print "Mixin.Foo"


class Composite(Mixin, Base):
    pass


x = Composite()
x.Foo()  # executes Mixin.Foo, perfect
x.Bar()  # indirectly executes Mixin.Foo, but I want Base.Foo
Run Code Online (Sandbox Code Playgroud)

aar*_*ing 6

你可以使用语法专门拨打你想要的电话

Base.Foo(self)
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

class Base(object):
    # snipped

    def Bar(self):
        Base.Foo(self)  # this will now call Base.Foo regardless of if a subclass
                        # overrides it

# snipped


x = Composite()
x.Foo()  # executes Mixin.Foo, perfect
x.Bar()  # prints "Base.Foo"
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为Python执行对表单的绑定方法的调用

instance.method(argument)
Run Code Online (Sandbox Code Playgroud)

好像他们是对未绑定方法的调用

Class.method(instance, argument)
Run Code Online (Sandbox Code Playgroud)

所以以该形式进行调用可以获得所需的结果.在方法内部,self只是调用该方法的实例,即隐式的第一个参数(显式为参数)

但请注意,如果子类重写Bar,那么就没有什么(好的)可以有效地做到这一点AFAIK.但这就是python中的工作方式.