python重写方法而不重新复制整个cod

2024-05-12 22:14:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

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

然而,有没有更优雅的解决方案


Tags: 方法runselfchildinitdef孩子pass
1条回答
网友
1楼 · 发布于 2024-05-12 22:14:55

首先,如果你的Child类没有改变一个方法,你就不需要用pass来定义它。只需什么都不做,多亏了inheritance magic,子实例也将拥有该方法


至于您的实际问题,如果您只想向子实例添加功能,您可以使用^{}。事实上,从文件来看:

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

相关问题 更多 >