Python中如何在子类中修改父类方法使其返回特定变量?
代码大致如下,其中 parent class 是某个开源库类
# parent class
class A(object):
# ... bala bala ...
def test(self, url):
# ... bala bala ...
rsp = self.http.send(url=url)
rsp = json.loads(rsp.content)
self._session = self._session_type(rsp['a'], rsp['b'])
subclass
class B(A):
def test(self, url):
# … bala bala …
rsp = self.http.send(url=url)
rsp = json.loads(rsp.content)
self._session = self._session_type(rsp[‘a’], rsp[‘b’])
self._xx = rsp[‘xx’]
如果 A.test 有将 rsp 返回的话,那 subclass 就只需要
class B(A):
def test(self, url):
rsp = super(self.__class__, self).test(url)
self._xx = rsp['xx']
所以...是否有办法可以让 parent class 的 test 方法返回 rsp 呢?(排除修改 parent class 源码的方法)
Python中如何在子类中修改父类方法使其返回特定变量?
B 中的 test 重写一遍 A.test 的实现,不就行了么
在子类中修改父类方法返回特定变量,直接重写方法就行。比如父类有个方法返回"parent",你想让它返回"child",就这么干:
class Parent:
def get_value(self):
return "parent"
class Child(Parent):
def get_value(self):
return "child" # 直接覆盖父类方法
# 测试
obj = Child()
print(obj.get_value()) # 输出: child
如果只想修改父类方法的部分逻辑,可以用super()调用父类方法再处理结果:
class Parent:
def process(self, x):
return x * 2
class Child(Parent):
def process(self, x):
parent_result = super().process(x) # 先调用父类方法
return parent_result + 10 # 修改返回结果
# 测试
obj = Child()
print(obj.process(5)) # 输出: 20 (5*2 + 10)
总结:直接重写方法最简单,用super()可以保留父类逻辑。
你的问题是在函数执行结束后获取函数内的变量,一个可行的方法:

子类覆盖父类的方法…
重写一个函数,直接覆盖在 A.test 上面,似乎也可以?
我帖子里的例子代码不就是这样写了…因为父类的这方法代码挺多的,感觉复制一遍挺麻烦的…
可行,不过要覆盖的这方法挺常用的…这样弄的话挺影响执行效率的(测试了下,大概要慢 9~10 倍)…
#5 肯定会慢啊。还有一个不一定可行的方法,修改 rsp=…之后调用的某个函数,例如这里的 self._session_type:
这样效率不会有太大影响,但还是要复制一点父类的代码,如果有短一点的函数那可以考虑。

