python – 为什么1 .__添加__(2)不工作?

Possible Duplicate:
07000

在Python中,一切都是一个对象。

但是再一次,为什么下面的片段不工作?

1.__add__(2)

但是,这样做是有效的:

n = 1
n.__add__(2)

n和1有什么区别?

它不是设计失败,它不工作?
例如,它也可以使用字符串文字。

"one".__add__("two")

为了比较,它也适用于其他纯面向对象的语言。

我们来仔细看看这个编译的c#示例:

Console.WriteLine(100.ToString());

那么再一次,从一切角度来看,Python与C#的区别呢?

Python的解析器故意非常简单 – 它强制执行的一个约束是,要弄清楚一个令牌意味着什么,它只能在右边看到一个标记(这是一个LL(1) parser)。

所以,它看到[number] [dot],并确定它是一个浮点文字。 ‘_’在一个浮点文字中不是一个有效的字符,所以它给出一个语法错误。

克服这个的最明显和最常见的方法是将数字括在括号中:

(1).__add__(2)

这迫使它在解析器的限制内将1解释为整数文字,并将点作为属性访问。

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

>>> 1 .__add__(2) 
3

也就是说,在..之前添加一个空格。原来,Python总是允许一个空间来进行任何属性查找:

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

我发现这是非常令人惊讶的,但似乎Python对待。在类似的规则下,因此将允许你周围的空间太多。

翻译自:https://stackoverflow.com/questions/12025531/why-does-1-add-2-not-work-out

转载注明原文:python – 为什么1 .__添加__(2)不工作?