【问题标题】:Do Python equal types have different values ever?Python相等类型是否有不同的值?
【发布时间】:2011-09-15 20:12:29
【问题描述】:
在 Python 中,如果我有以下代码:
r = Numeric(str)
i = int(r)
if r == i :
return i
return r
这是否等同于:
r = Numeric(str)
return r
或者不同类型r和i的==值是否给出不同的返回值r和i?
【问题讨论】:
标签:
python
integer
floating-point
type-conversion
language-lawyer
【解决方案1】:
这完全取决于类是否实现了足够的__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
【解决方案2】:
让我们看看:
>>> float(2) == int(2)
True
使用==可以认为不同的类型是相等的。
【解决方案3】:
问题:“不同类型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