有办法在 subclass 中修改 parent class 的方法,使其返回某个变量吗?( parent class 的该方法无返回值)

2017-06-28 22:28:42 +08:00
 fuxkcsdn

代码大致如下,其中 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 源码的方法)

2005 次点击
所在节点    Python
6 条回复
douxie
2017-06-28 23:14:07 +08:00
B 中的 test 重写一遍 A.test 的实现,不就行了么
XYxe
2017-06-28 23:14:11 +08:00
你的问题是在函数执行结束后获取函数内的变量,一个可行的方法:
Hzzone
2017-06-28 23:18:25 +08:00
子类覆盖父类的方法...
twistoy
2017-06-28 23:30:08 +08:00
重写一个函数,直接覆盖在 A.test 上面,似乎也可以?
fuxkcsdn
2017-06-28 23:46:55 +08:00
@douxie
@Hzzone
我帖子里的例子代码不就是这样写了...因为父类的这方法代码挺多的,感觉复制一遍挺麻烦的...

@XYxe
可行,不过要覆盖的这方法挺常用的...这样弄的话挺影响执行效率的(测试了下,大概要慢 9~10 倍)...
XYxe
2017-06-29 07:41:59 +08:00
@fuxkcsdn #5 肯定会慢啊。还有一个不一定可行的方法,修改 rsp=...之后调用的某个函数,例如这里的 self._session_type:



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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/371780

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX