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中如何在子类中修改父类方法使其返回特定变量?

7 回复

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:



这样效率不会有太大影响,但还是要复制一点父类的代码,如果有短一点的函数那可以考虑。

回到顶部