Змея / Говнокод #12055 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
class GovnoClass(object):
    def __init__(self, khooj, pizda, djigurda):
        self.khooj = khooj
        self.pizda = pizda
        self.djigurda = djigurda

    def __eq__(self, right):
        return (self.khooj , self.pizda, self.djigurda ) == right


a = GovnoClass(1,4,88)
b = GovnoClass(1,4,88)

print a==b

Выводит True. Почему?

Запостил: serpinski serpinski, (Updated )

Комментарии (8) RSS

      • Если внимательно посмотреть на выхлоп программы, то увидим, что __eq__ вызывается дважды - первый раз ей приходит 2 объекта (вызов из строки 14), а второй раз объект и тупл (вызов из строки 8).

        В доке по питону насчет этого есть вот такая мутная фраза: 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); rather, __lt__() and __gt__() are each other’s reflection, __le__() and __ge__() are each other’s reflection, and __eq__() and __ne__() are their own reflection.
        Ответить
  • > Почему?

    Сначала вызвается __eq__ первого объекта ( a, b ), 
    .   который вызывает __eq__ второго объекта ( b, (..a's fileds..) ), 
    .       который возвращает результат 
    .           сравнения туплов (..a's fileds..) и (..b's fileds..).
    Ответить
  • Автор, ты чего хочешь? Сравнить два объекта и узнать, не один ли и тот же это объект что ли?

    дык, проверяй через is тогда.
    http://ideone.com/6B6ANN
    Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8