可能重复:
访问蟒INT文字方法
在Python中, everything is an object
。
但话又说回来,为什么不下面的代码片段工作?
1.__add__(2)
但是,这并不工作:
n = 1
n.__add__(2)
是什么区别n
和1
?
这难道不是一种设计的失败,它不工作? 例如,它不与工作string
文字,以及。
"one".__add__("two")
为了便于比较,它的工作原理以及在其他纯粹的面向对象的语言了。
让我们来看看这个编译C#示例仔细看看:
Console.WriteLine(100.ToString());
再说,有什么区别Python
从C#
中的透视everything is an object
?
Python的解析器是故意非常简单-它强制对自身的约束之一,找出一个令牌意味着,它只能看一个令牌的权利(这是一个LL(1)语法分析器 )。
所以,它看到[数字] [点],并确定它是一个浮点字面。 '_'
不是一个有效的字符在浮点常量,因此它提供了一个语法错误。
要克服这一点的最明显和最常见的方式是把括号中的数字:
(1).__add__(2)
这迫使它来解释1
作为一个整数文字,并点为属性访问,解析器的限制范围内。
另一个有趣的解决方法是这样的:
>>> 1 .__add__(2)
3
也就是说,前添加一个空格.
。 事实证明,Python中总是允许的空间有任何属性查询:
>>> range(4) .count(3)
1
我发现这相当令人惊讶,但似乎Python的对待.
在类似的规则+
,因为你周围喜欢和这样才能使尽可能多的空间。
Python的解释1.
浮法所以你要添加的括号:
>>> (1).__add__(2)
3
或空间:
>>> 1 .__add__(2)
3
如果你想在这里浮点值只放2个点。
>>> 1..__add__(2) #float
3.0