Найти - Пользователи
Полная версия: Копаемся во внутренностях запросов или как сравниваются объекты модели
Начало » Django » Копаемся во внутренностях запросов или как сравниваются объекты модели
1
regall
Такой вот интересный вопрос возник, врядли в доках о таком пишут, но все же…. Речь идет о сравнении объектов.
Делаем раз:
test1 = Class.objects.get(<условие1>)
Делаем два:
test2 = Class.objects.get(<условие1>)
Сравниваем:
test1=test2
>>> True
Это безусловно хорошо, но мой моск требует узнать, почему это так работает (то есть как джанга сравнивает объекты). По идее, объекты собираются два разных, ссылки разные, соответственно сравнение должно давать False?
Подскажите каким образом переопределено сравнение объектов модели?

Спасибо.
regall
lorien
Ну, это вы скорее описываете is, а не == сравнение.
Не уж, увольте
>>> class A:
... x=1
...
>>> a = A()
>>> b = A()
>>> a==b
False
>>> a is b
False
.............
>>> c=a
>>> c==a
True
>>> b==a
False
>>> b==c
False
>>>
P.S. А за ссылочку спасибо, ответ получил, тема закрыта =)
regall
lorien
ибо == - это __eq__ и ей нет дела до ссылок, как её определили, так она и будет работать.
Совершенно верно, мне как раз и было интересно, как разработчики джанго переопределили этот метод для класса Model, ведь по умолчанию, одинаковые, выдранные из базы объекты (если бы метод __eq__ не был бы определен, а по умолчанию object этого метода не имеет), при сравнении:
ob1==ob2
давалы бы False.

P.S. И вообще вопрос чисто академического интереса =).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB