gpt4 book ai didi

python - 如何在 BaseClass 方法被 Python 中的 DerivedClass 方法覆盖之前执行它

转载 作者:太空宇宙 更新时间:2023-11-04 06:45:46 25 4
gpt4 key购买 nike

我几乎可以肯定我想做的事情有一个合适的术语,但由于我不熟悉它,我将尝试明确地描述整个想法。所以我拥有的是一组类,它们都继承自一个基类。所有类几乎完全由不同的方法组成,这些方法仅在每个类中相关。然而,有几种方法具有相似的名称、通用功能和一些逻辑,但它们的实现仍然大不相同。所以我想知道是否有可能在基类中创建一个方法,该方法将执行一些类似于所有方法的逻辑,但仍继续在类特定方法中执行。希望这是有道理的,但我会尝试给出一个我想要的基本示例。

所以考虑一个看起来像这样的基类:

class App(object):

def __init__(self, testName):
self.localLog = logging.getLogger(testName)

def access(self):
LOGIC_SHARED

还有一个派生类的例子:

class App1(App):

def __init__(self, testName):
. . .
super(App1, self).__init__(testName)

def access(self):
LOGIC_SPECIFIC

所以我想实现的是基类access方法中的LOGIC_SHARED部分在调用access方法时执行任何 App之前 执行LOGIC_SPECIFIC 部分(正如它所说)特定于每个 access 所有派生类的方法。

如果这有什么不同的话,LOGIC_SHARED 主要由日志记录和维护任务组成。

希望已经足够清楚并且这个想法有意义。

注意 1:LOGIC_SHARED 部分中使用了特定于类的参数。

注意 2:仅使用 Python 内置函数和模块来实现该行为很重要。

注意事项 3:LOGIC_SHARED 部分看起来像这样:

try:
self.localLog.info("Checking the actual link for %s", self.application)
self.link = self.checkLink(self.application)
self.localLog.info("Actual link found!: %s", self.link)
except:
self.localLog.info("No links found. Going to use the default link: %s", self.link)

因此,我使用了很多特定的类实例属性,但我不确定如何使用基类中的这些属性。

最佳答案

当然可以,把具体的逻辑放在它自己的“私有(private)”函数中,可以被派生类覆盖,把access留给Base。

class Base(object):
def access(self):
# Shared logic 1
self._specific_logic()
# Shared logic 2

def _specific_logic(self):
# Nothing special to do in the base class
pass

# Or you could even raise an exception
raise Exception('Called access on Base class instance')


class DerivedA(Base):
# overrides Base implementation
def _specific_logic(self):
# DerivedA specific logic

class DerivedB(Base):
# overrides Base implementation
def _specific_logic(self):
# DerivedB specific logic

def test():
x = Base()
x.access() # Shared logic 1
# Shared logic 2

a = DerivedA()
a.access() # Shared logic 1
# Derived A specific logic
# Shared logic 2

b = DerivedB()
b.access() # Shared logic 1
# Derived B specific logic
# Shared logic 2

关于python - 如何在 BaseClass 方法被 Python 中的 DerivedClass 方法覆盖之前执行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23778163/

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