【发布时间】:2014-05-21 08:42:16
【问题描述】:
我几乎可以肯定我想做的事情有一个合适的术语,但由于我不熟悉它,我将尝试明确地描述整个想法。所以我所拥有的是一组类,它们都继承自一个基类。所有类几乎完全由仅在每个类中相关的不同方法组成。但是,有几种方法具有相似的名称、通用功能和一些逻辑,但它们的实现仍然大不相同。所以我想知道的是是否可以在基类中创建一个方法,该方法将执行一些类似于所有方法的逻辑,但仍继续在类特定方法中执行。希望这是有道理的,但我会尝试给出一个我想要的基本示例。
所以考虑一个看起来像这样的基类:
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部分在调用anyApp类的access方法时执行before 执行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)
因此,我使用了很多特定的类实例属性,但我不确定如何使用基类中的这些属性。
【问题讨论】:
-
如果您展示这些“类特定参数”的示例,我可以向您展示如何使用我描述的相同技术将它们从问题中抽象出来。
-
@JonathonReinhart 非常感谢您的努力。非常感谢!我添加了 NOTE 3 以及共享逻辑部分的示例供您参考。如果我能提供更多信息,请告诉我。
-
那么您是说
self.application在基类的不同实现中无效?基本上,您只需要在子类中以不同方式覆盖的方法后面隐藏特定于类的细节。 -
super(App1, self).access()还不够吗?就像构造函数一样。 -
@JonathonReinhart
self.application未在基类中定义。它在派生类中定义。由于每个派生类代表一个应用程序,self.application具有特定的应用程序名称。self.link也是如此。我希望我能理解你的问题。
标签: python oop inheritance