【问题标题】: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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-12
          • 1970-01-01
          相关资源
          最近更新 更多