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)
你可以使用语法专门拨打你想要的电话
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中的工作方式.