在Python中,如果我有以下代码:
r = Numeric(str)
i = int(r)
if r == i :
return i
return r
这相当于:
r = Numeric(str)
return r
或者不同类型的==值r和i给出不同的返回值r和i?
答案 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