我有一个类Father
,我调用它的run
方法来完成这项工作。我用 Child
类继承这个类。看起来像这样:
class Father:
def __init__(self):
...
def run(self):
work1()
work2()
....
class Child(Father):
def run(self):
pass
通常,我使用 pass
,因为大多数时候, children 做与父亲相同的事情,只是从不同的上下文中被调用。然而,有时行为会改变。但当它执行时,来自 Father
的 work1
、work2
等仍在执行。只应添加最后一个workn
。
如何能够重写 run
方法,而无需从 Father.run
复制整个代码,而只需添加最后一个 work
操作说明?我已经尝试过这个,它有效:
class Father:
def run(self):
work1()
...
run_additionnal_stuf()
def run_additionnal_stuf(self):
pass
class Child(Father):
def run_additionnal_stuf(self):
work()
但是,有没有更优雅的解决方案呢?
最佳答案
首先,如果您的 Child
类没有更改方法,则无需使用 pass
定义它。简单地什么都不做,感谢 inheritance magic ,子实例也将具有该方法。
对于您的实际问题,如果您只想为子实例添加功能,您可以使用 super
。事实上,从文档来看:
This is useful for accessing inherited methods that have been overridden in a class.
所以你可以这样做:
class Child(Father):
def run(self):
super().run()
work_n()
<小时/>
一个简单的演示:
class Father:
def run(self):
print("In Father")
class Child(Father):
def run(self):
super().run()
print("In Child")
f = Father()
c = Child()
f.run()
c.run()
这预期打印出来:
In Father
In Father
In Child
关于python重写方法,无需重新复制整个代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57375616/