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 или я чего-то не понимаю?
Re: Python:Сравнение объектов разных типов
От: Daevaorn Россия  
Дата: 21.01.09 10:07
Оценка:
Здравствуйте, Аноним, Вы писали:

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


Не понятно что вызвало у вас затруднение. В референсе описано поведение стандартных операторов. Вы переопределили оператор сравнения, а значит и поменяли стандартное поведение.
Re[2]: Python:Сравнение объектов разных типов
От: Аноним  
Дата: 21.01.09 11:23
Оценка:
Здравствуйте, Daevaorn, Вы писали:

D>Не понятно что вызвало у вас затруднение. В референсе описано поведение стандартных операторов. Вы переопределили оператор сравнения, а значит и поменяли стандартное поведение.


Хм, это-то я понял, я в мануале не смог найти четкое описание этого, может, не там искал? Фраза "objects of different types always compare unequal" меня шибко смутила. Оно конечно, мне не шашечки, мне ехать надо, но хорошо бы, чтобы еще и шашечки были нарисованы — для надежности
Re[3]: Python:Сравнение объектов разных типов
От: Daevaorn Россия  
Дата: 21.01.09 12:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Daevaorn, Вы писали:


D>>Не понятно что вызвало у вас затруднение. В референсе описано поведение стандартных операторов. Вы переопределили оператор сравнения, а значит и поменяли стандартное поведение.


А>Хм, это-то я понял, я в мануале не смог найти четкое описание этого, может, не там искал? Фраза "objects of different types always compare unequal" меня шибко смутила. Оно конечно, мне не шашечки, мне ехать надо, но хорошо бы, чтобы еще и шашечки были нарисованы — для надежности


Вы ищите ведьм там где их нет. Следующим же предложением идет именно явное указание того, что поведение может быть изменено.
Re[4]: Python:Сравнение объектов разных типов
От: Аноним  
Дата: 21.01.09 14:05
Оценка:
Здравствуйте, Daevaorn, Вы писали:

D>Вы ищите ведьм там где их нет. Следующим же предложением идет именно явное указание того, что поведение может быть изменено.


Видимо, так оно и есть. Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.