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

无法理解Python中运算符重载的代码逻辑,请求通俗解释

这段Python代码的运行原理详解

先把你的代码和运行结果贴出来:

代码

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
      return f"{self.x}i+{self.y}j"

    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)

p1=Point(1,2)
print(p1)
p2=Point(3,4)
print(p2)

print(p1+p2)
print(type(p1+p2))

运行结果

1i+2j
3i+4j
4i+6j
<class '__main__.Point'>

下面拆解每一部分的逻辑:

  • Point类的定义:这个类用来封装带x、y两个分量的“点”或“向量”,里面的三个方法都是Python的特殊方法(以双下划线开头结尾,也叫魔法方法),用来给类添加默认行为。
  1. __init__方法:这是类的构造函数,创建Point对象时自动执行。比如p1=Point(1,2),就是把传入的1和2分别赋值给p1的x、y属性,让p1记住自己的两个分量值。

  2. __str__方法:定义了用print()打印Point对象时的输出格式。当你执行print(p1),Python会自动调用这个方法,返回格式化后的字符串"1i+2j",所以控制台就会输出这个内容。

  3. __add__方法:重载了加法运算符+。平时+只能加数字、拼接字符串,但这里给Point类重写了这个方法,让两个Point对象可以直接相加。比如p1+p2时,Python会调用这个方法:把p1的x和p2的x相加(1+3=4),p1的y和p2的y相加(2+4=6),然后返回一个新的Point对象(x=4,y=6)。

最后看运行结果的对应逻辑:

  • print(p1) → 调用__str__,输出1i+2j
  • print(p2) → 同理输出3i+4j
  • print(p1+p2) → 先执行加法得到新的Point对象,再调用__str__打印,输出4i+6j
  • type(p1+p2) → 确认相加后的结果还是Point类的实例,所以输出<class '__main__.Point'>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:25:12