здесь написано, что:
при сравнении объектов различных типов
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 или я чего-то не понимаю?
Здравствуйте, Daevaorn, Вы писали:
D>Не понятно что вызвало у вас затруднение. В референсе описано поведение стандартных операторов. Вы переопределили оператор сравнения, а значит и поменяли стандартное поведение.
Хм, это-то я понял, я в мануале не смог найти четкое описание этого, может, не там искал? Фраза "objects of different types
always compare unequal" меня шибко смутила. Оно конечно, мне не шашечки, мне ехать надо, но хорошо бы, чтобы еще и шашечки были нарисованы — для надежности
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Daevaorn, Вы писали:
D>>Не понятно что вызвало у вас затруднение. В референсе описано поведение стандартных операторов. Вы переопределили оператор сравнения, а значит и поменяли стандартное поведение.
А>Хм, это-то я понял, я в мануале не смог найти четкое описание этого, может, не там искал? Фраза "objects of different types always compare unequal" меня шибко смутила. Оно конечно, мне не шашечки, мне ехать надо, но хорошо бы, чтобы еще и шашечки были нарисованы — для надежности
Вы ищите ведьм там где их нет. Следующим же предложением идет именно явное указание того, что поведение может быть изменено.