在 Python 中扩展继承函数的行为
Posted
技术标签:
【中文标题】在 Python 中扩展继承函数的行为【英文标题】:Extending the behavior of an inherited function in Python 【发布时间】:2015-05-03 13:16:55 【问题描述】:假设我们有以下类:
class Base(object):
def load(self):
# do logic A
# do logic B
class Child(Base):
def load(self):
# do logic C
我知道装饰器可用于扩展 Python 中的函数行为,但我不知道如何在我的案例中应用它。
当Child's
load()
被调用时,如何才能得到以下代码执行顺序?:
logic A
logic C
logic B
我不想做什么
class Base(object)
def logicA()
pass
def logicB()
pass
def load()
pass
class Child(Base):
def load(self):
super.logicA()
# do logic C
super.logicB()
我只想编写逻辑 C,而不必显式调用逻辑 A 和 B
【问题讨论】:
将逻辑 A 和 B 拆分为两个不同的功能? 【参考方案1】:你的意思是这样的:
class Base(object):
def load(self):
print('do logic A')
print('do logic B')
class Child(Base):
def load(self):
super().load()
print('do logic C')
c = Child()
c.load()
这将打印:
do logic A
do logic B
do logic C
我能想到的唯一另一种方法是:
class Base(object):
def load(self):
print('do logic A')
self.new_logic() # call new logic from child class, if exist.
print('do logic B')
def new_logic(self):
# overwrite this one in child class
pass
class Child(Base):
def new_logic(self):
print('do logic C')
c = Child()
c.load()
打印出来:
do logic A
do logic C
do logic B
【讨论】:
关闭,但我的目标是在 B 之前调用逻辑 C 但问题是,我不想明确地调用逻辑 A 或 B...逻辑 C 基本上只是 Base load() 的扩展 @Unit978 你是说你想让子函数在基类函数中间执行? 也许将执行逻辑 C 的函数传递给基类函数并在逻辑 A 和逻辑 B 之间调用它? @Unit978 我用其他可能性修改了答案。以上是关于在 Python 中扩展继承函数的行为的主要内容,如果未能解决你的问题,请参考以下文章