【发布时间】:2021-12-16 13:02:03
【问题描述】:
假设Parent 类是:
class Parent:
def __init__(self, a):
self.a = a
def do_something(self):
a = self.a
b = self.a
print('The a is ', a)
print('The b is ', b)
我想创建一个 Child 类,它只重新定义 b
类似:
class Child(Parent):
def do_something(self, custom_param):
@some_exotic_decorator_or_something_else(b=custom_param)
super().do_something()
并获得如下输出:
obj = Child('the_a')
obj.do_something('the_b')
The a is the_a
The b is the_b
当然原始方法有很多行和复杂的逻辑来覆盖整个方法。这也是常见的python库之一,所以我想尽量减少对方法的入侵。
在 python 中有什么常用的方法来做到这一点?
为了更清楚,我要覆盖的方法是_write_end_record
我只想重新定义centDirOffset。所有其他逻辑都运行良好。我可以将整个方法复制并粘贴到我的代码中,并且只更改一行,但这看起来不是一个聪明的主意
【问题讨论】:
-
不是真的...函数是不透明的对象,您不能轻易地触及到修改单个变量或行或其他任何东西。 — 是的,如果向后弯腰足够多,这可能是可能的,但是对于您要解决的任何问题,这真的不应该是您的第一个 goto 解决方案。
-
我是否正确理解你的父类不是你的,而是现有库中的东西?
-
@CrazyChucky 是的。在
To be more clear之后添加了附加信息
标签: python overriding