Python __add__ 整数魔术方法

Python __add__ magic method with integers

当我正在尝试这个时:

>>> "a".__add__("b")
'ab'

正在运行。但是这个

>>> 1.__add__(2)
SyntaxError: invalid syntax

不工作。 这是有效的:

>>> 1 .__add__(2) # notice that space after 1
3

这是怎么回事?它与变量命名规则有关吗?python 是否认为我在不使用 space 时尝试创建变量?

python 词法分析器试图将后跟一个点的整数解释为浮点数。为避免这种歧义,您必须添加额外的 space.

为了比较,相同的代码在双精度上运行没有问题:

>>> 4.23.__add__(2)
6.23

如果将 int 放在括号中,它也有效:

>>> (5).__add__(4)
9 

Python 解析器有意保持愚蠢和简单。当它看到 1. 时,它认为你正在处理一个浮点数,而 1._ 不是一个有效数字(或者更准确地说,1. 是一个有效的浮点数,你可以' t 跟随一个值 _"a" __add__("b") 也是一个错误)。因此,任何明确表明 . 不是数字的一部分的东西都会有所帮助:正如您发现的那样,在点之前有一个 space (因为 space 在数字中找不到,Python 放弃了浮点数的想法并使用整数语法)。括号也有帮助:(1).__add__(2)。添加另一个点也是如此:1..__add__(2)(这里,1. 是一个有效数字,然后 .__add__ 做通常的事情)。

当你使用 1. 时,解释器认为你开始写浮点数(你可以在 IDE(至少 Pycharm)中看到点是蓝色的,而不是白色的)。 space 告诉它把 1. 当作一个完整的数字,1.01..__add__(2) 也可以解决问题。