Имеют ли когда-либо равные типы Python разные значения? - PullRequest
0 голосов
/ 16 сентября 2011

В Python, если у меня есть следующий код:

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

Это эквивалентно:

r = Numeric(str)
return r

Или сделать == значения разных типов r, и я даю разныевозвращаемые значения r и i?

Ответы [ 3 ]

4 голосов
/ 16 сентября 2011

Все зависит от того, реализует ли класс адекватный метод __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 голосов
/ 16 сентября 2011

Посмотрим:

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

Различные типы можно считать равными, используя ==.

1 голос
/ 16 сентября 2011

Вопрос: «Делать == значения разных типов r и я даю разные возвращаемые значения 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
...