Python相同的类型有不同的值吗?

时间:2011-09-15 20:12:29

标签: python integer floating-point type-conversion language-lawyer

在Python中,如果我有以下代码:

r = Numeric(str)
i = int(r)
if r == i :
    return i
return r

这相当于:

r = Numeric(str)
return r

或者不同类型的==值r和i给出不同的返回值r和i?

3 个答案:

答案 0 :(得分:4)

这完全取决于该类是否实现了足以覆盖__eq__运算符的==方法。

编辑:添加了一个小例子:

>>> class foo:
...     def __init__(self,x):
...         self.x = x
...     def __eq__(self,y):
...         return int(self.x)==int(y)
... 
>>> f = foo(5)
>>> f == '5'
True
>>> 5 == '5'
False

答案 1 :(得分:2)

让我们看看:

>>> float(2) == int(2)
True

使用==可以认为不同类型相同。

答案 2 :(得分:1)

问题:“做不同类型的==值r和i给出不同的返回值r和i?”

答案:显然它们不同;他们有不同的类型。

>>> print(type(i))
<type 'int'>
>>> print(type(n))
<class '__main__.Numeric'>

在上面的例子中,我声明了一个名为Numeric的类来测试。如果你实际上有一个模块实现了一个名为Numeric的类,它就不会说__main__.Numeric而是其他的东西。

如果该类实现了__eq__()方法函数,那么==的结果将取决于该函数的作用。

class AlwaysEqual(object):
    def __init__(self, x):
        self.x = x
    def __eq__(self, other):
        return True

有了上述内容,我们现在可以做到:

>>> x = AlwaysEqual(42)
>>> print(x == 6*9)
True
>>> print(x == "The answer to life, the universe, and everything")
True