You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OOP继承概念理解:Python类代码运行逻辑与特性疑问咨询

你给出的代码规范排版如下:

class A(object) :
    def __init__(self, x) :
        self._x = 2 * x
    def m1(self, x) :
        return self.m2(x) + 2
    def m2(self, x) :
        return x - 1
    
class B(A) :
    def m2(self, y) :
        self._y = y
        return self._x + self._y

问题解答

第一个疑问确认

你的判断完全正确:

  • 执行a = A(1)时,A的构造方法将入参1乘以2赋值给实例属性_x,最终a._x的取值为2
  • 调用A类实例的m1方法时,你传入的参数会直接赋值给m1的形参x,比如执行a.m1(5)时,m1作用域内的x取值就是5
  • m1的执行逻辑确实是先将x传入self.m2()得到返回值,再加2作为m1的最终返回结果。以a.m1(5)为例:调用A类自带的m2传入5,返回5-1=4,再加2得到6,就是本次m1调用的返回值。

第二个疑问确认

B类重写的m2方法中用到的_x,就是从父类A继承来的实例属性:

  • 由于B没有自定义构造方法__init__,实例化B时会自动调用父类A的构造方法,必须传入参数完成_x的初始化,比如执行b = B(2)时,b._x的取值为4
  • 补充OOP常见考点:如果调用B类实例的m1方法,因为B没有重写m1,会直接执行从A继承的m1逻辑,但此时self.m2(x)会优先调用B自己重写的m2方法,这就是多态特性的典型体现。比如执行b.m1(3)时:m1拿到的x为3,调用B的m2传入3,返回4+3=7,再加2得到9,就是最终的返回结果。

内容的提问来源于stack exchange,提问作者AgentiDiogenes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:36:11