新手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
答案 0 :(得分:6)
您可以使用语法
专门拨打电话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
,那么就没有什么(好)可以有效地做到这一点AFAIK。但这就是python中的工作方式。