gpt4 book ai didi

Python:如何区分继承的方法

转载 作者:太空狗 更新时间:2023-10-30 02:35:14 25 4
gpt4 key购买 nike

新手 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

最佳答案

您可以使用语法专门进行您想要的调用

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 执行对表单绑定(bind)方法的调用

instance.method(argument)

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

Class.method(instance, argument)

因此以该形式进行调用可为您提供所需的结果。在方法内部,self 只是调用该方法的实例,即隐式第一个参数(显式作为参数)

但是请注意,如果一个子类覆盖了 Bar,那么据我所知,您无法有效地对其进行任何(好的)操作。但这就是 Python 中的工作方式。

关于Python:如何区分继承的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3882109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com