Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Копаемся во внутренностях запросов или как сравниваются объекты модели [RSS Feed]

#1 Ноя. 12, 2009 10:18:08

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Копаемся во внутренностях запросов или как сравниваются объекты модели

Такой вот интересный вопрос возник, врядли в доках о таком пишут, но все же…. Речь идет о сравнении объектов.
Делаем раз:

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

Спасибо.



Отредактировано (Ноя. 12, 2009 10:18:25)

Офлайн

#2 Ноя. 12, 2009 13:47:50

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Копаемся во внутренностях запросов или как сравниваются объекты модели

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. А за ссылочку спасибо, ответ получил, тема закрыта =)



Отредактировано (Ноя. 12, 2009 13:50:08)

Офлайн

#3 Ноя. 12, 2009 15:21:35

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Копаемся во внутренностях запросов или как сравниваются объекты модели

lorien
ибо == - это __eq__ и ей нет дела до ссылок, как её определили, так она и будет работать.
Совершенно верно, мне как раз и было интересно, как разработчики джанго переопределили этот метод для класса Model, ведь по умолчанию, одинаковые, выдранные из базы объекты (если бы метод __eq__ не был бы определен, а по умолчанию object этого метода не имеет), при сравнении:
ob1==ob2
давалы бы False.

P.S. И вообще вопрос чисто академического интереса =).



Офлайн

  • Начало
  • » Django
  • » Копаемся во внутренностях запросов или как сравниваются объекты модели[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version