Расширение поведения унаследованной функции в Python
Допустим, у нас есть следующие классы:
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
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