1. Python / Говнокод #18011

    −241

    1. 1
    2. 2
    3. 3
    def __repr__(self):
            # почему здесь бесконечная рекурсия?
            return repr(self.__repr__)

    Запостил: 3_14dar, 17 Апреля 2015

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

    • cleaned
      Ответить
    • repr gonna repr
      http://catoverflow.com/cats/XU3AWFI.gif
      Ответить
    • И почему?
      Ответить
    • Нету там никакой рекурсии. Рекурсия возникает внутри str'а, когда ты результат пытаешься показать.

      <bound method Test.__repr__ of здесь будет вызов __repr__>
      Ответить
      • Можно подробнее? Нечто вызывает obj.__repr__(), который возвращает obj.__repr__, дальше что?
        Ответить
        • Трабла в repr() у метода. Он выводит имя метода + repr объекта в виде <bound method Test.__repr__ of здесь будет вызов obj.__repr__>. А у твоего объекта repr возвращает repr() метода, который выводит имя метода + repr объекта и т.п.
          Ответить
        • Может быть вот это поможет въехать в происходящее: http://ideone.com/xixfX5
          Ответить
          • "bound method Test.__repr__ of " + self.__repr__()

            Эпичненько.

            Один вопрос: почему str() вызывает __repr__(), когда есть __str__() ?
            Ответить
            • > почему str() вызывает __repr__(), когда есть __str__()
              А у методов (класс instancemethod) походу и __str__ и __repr__ одинаково запилены.
              Ответить
              • Но почему дергается repr? Типикал питон, простой вначале, хуй проссыш какой если в дебри залезать.
                Ответить
                • > Но почему дергается repr?
                  Ну захотелось авторам: "а давайте выводить имя метода и представление объекта, на котором он навешен". Хуй знает. В питоне же такие тонкости не принято документировать.
                  Ответить
                  • str() по идее __str__() должно дергать, а оно уже потом что хочет. А тут получается его без спросу дергают?

                    Кстати, а есть где-то дефолтовый reps? Типа, object.repr(self), если свой repr перезаписали.
                    Сам же и отвечу - object.__repr__(obj)
                    Ответить
          • P.S. Как узнал?
            Ответить
            • > Как узнал?
              Немного поигрался с консолькой, возвращая разную хуиту из __repr__.
              Ответить
        • P.S. http://ideone.com/COaZQB
          Ответить
    • пщщ пщщ, __repr__ вызывает __str__, __str__ ответьте!
      Ответить

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