无法理解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的特殊方法(以双下划线开头结尾,也叫魔法方法),用来给类添加默认行为。
__init__方法:这是类的构造函数,创建Point对象时自动执行。比如
p1=Point(1,2),就是把传入的1和2分别赋值给p1的x、y属性,让p1记住自己的两个分量值。__str__方法:定义了用
print()打印Point对象时的输出格式。当你执行print(p1),Python会自动调用这个方法,返回格式化后的字符串"1i+2j",所以控制台就会输出这个内容。__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+2jprint(p2)→ 同理输出3i+4jprint(p1+p2)→ 先执行加法得到新的Point对象,再调用__str__打印,输出4i+6jtype(p1+p2)→ 确认相加后的结果还是Point类的实例,所以输出<class '__main__.Point'>
内容的提问来源于stack exchange,提问作者Warrior
相关产品推荐
相关产品推荐

