代码之家  ›  专栏  ›  技术社区  ›  Adrian McCarthy

Python:如何区分继承的方法

  •  4
  • Adrian McCarthy  · 技术社区  · 15 年前

    新手蟒蛇问题。我有一个继承自多个类的类,一些专门化类重写了基类中的一些方法。在某些情况下,我想调用未特殊化的方法。这可能吗?如果是,语法是什么?

    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
    
    1 回复  |  直到 15 年前
        1
  •  6
  •   aaronasterling    15 年前

    您可以使用语法具体地进行所需的调用

    Base.Foo(self)
    

    就你而言:

    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"
    

    这是因为Python执行对窗体的绑定方法的调用

    instance.method(argument)
    

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

    Class.method(instance, argument)
    

    因此,以那种形式进行调用会得到所需的结果。在方法里面, self

    但是请注意,如果子类重写 Bar