Python:Сравнение объектов разных типов
От: Аноним  
Дата: 21.01.09 09:44
Оценка:
здесь написано, что:

при сравнении объектов различных типов

objects of different types always compare unequal,
and are ordered consistently but arbitrarily.


И в то же время у объекта определяется метод __eq__ — как раз для сравнения объектов, причем отмечается, что объекты могут быть разных типов, по крайней мере, намекается на то, что они могут по-разному относиться к попытке их "сравнить"

x==y calls x.__eq__(y)

,и ещё:

There are no swapped-argument versions of these methods
(to be used when the left argument does not support the operation
but the right argument does)

Кому же все-таки верить? Для проверки я создал класс:
(сравнение чисел не только "формально по арифметическому равенству", но и по типу)
class TypeControlCompare:
    '''compare two values and check the type
    '''
    def __init__(self,value_expected,type_expected):
        self.__value_expected=value_expected
        self.__type_expected=type_expected
    def __eq__(self,value):
        return (value==self.__value_expected)and(isinstance(value,self.__type_expected))


И в результате ОНО РАБОТАЕТ, причем в обе стороны:

2==TypeControlCompare(2,int)
>>>True
TypeControlCompare(2,int)==2
>>>True
2==TypeControlCompare(2,float)
>>>False
TypeControlCompare(2,float)==2
>>>False

Просто не могу понять, в чем тут дело. Ошибка в мануале Python или я чего-то не понимаю?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.