gpt4 book ai didi

python重写方法,无需重新复制整个代码

转载 作者:行者123 更新时间:2023-12-01 00:40:33 24 4
gpt4 key购买 nike

我有一个类Father,我调用它的run方法来完成这项工作。我用 Child 类继承这个类。看起来像这样:

class Father:
def __init__(self):
...

def run(self):
work1()
work2()
....

class Child(Father):
def run(self):
pass

通常,我使用 pass,因为大多数时候, children 做与父亲相同的事情,只是从不同的上下文中被调用。然而,有时行为会改变。但当它执行时,来自 Fatherwork1work2 等仍在执行。只应添加最后一个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/

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