为什么1 .__添加__(2)不工作了? [重复](Why does 1.__add__(2)

2019-07-31 02:26发布

可能重复:
访问蟒INT文字方法

在Python中, everything is an object

但话又说回来,为什么不下面的代码片段工作?

1.__add__(2)

但是,这并不工作:

n = 1
n.__add__(2)

是什么区别n1

这难道不是一种设计的失败,它不工作? 例如,它不与工作string文字,以及。

"one".__add__("two")

为了便于比较,它的工作原理以及在其他纯粹的面向对象的语言了。

让我们来看看这个编译C#示例仔细看看:

Console.WriteLine(100.ToString());

再说,有什么区别PythonC#中的透视everything is an object

Answer 1:

Python的解析器是故意非常简单-它强制对自身的约束之一,找出一个令牌意味着,它只能看一个令牌的权利(这是一个LL(1)语法分析器 )。

所以,它看到[数字] [点],并确定它是一个浮点字面。 '_'不是一个有效的字符在浮点常量,因此它提供了一个语法错误。

要克服这一点的最明显和最常见的方式是把括号中的数字:

(1).__add__(2)

这迫使它来解释1作为一个整数文字,并点为属性访问,解析器的限制范围内。

另一个有趣的解决方法是这样的:

>>> 1 .__add__(2) 
3

也就是说,前添加一个空格. 。 事实证明,Python中总是允许的空间有任何属性查询:

>>> range(4) .count(3)
1

我发现这相当令人惊讶,但似乎Python的对待. 在类似的规则+ ,因为你周围喜欢和这样才能使尽可能多的空间。



Answer 2:

Python的解释1.浮法所以你要添加的括号:

>>> (1).__add__(2)
3

或空间:

>>> 1 .__add__(2)
3

如果你想在这里浮点值只放2个点。

>>> 1..__add__(2) #float
3.0


文章来源: Why does 1.__add__(2) not work out? [duplicate]