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

    −94

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    def __call__(self, *args, **kw):
        # ...
        if args and len(args) > 1 and args[0] is args[1][0]:
            # fml...
            temp = list(args)
            temp.pop(1)
            args = tuple(temp)
        return self._execute(*args, **kw)

    Быль про архитектуру.

    Запостил: wvxvw, 06 Октября 2012

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

    • temp = list(args)
      temp.pop(1)
      args = tuple(temp)
      args[1:], не? Не, вру... но args[0:1]+args[2:] сработает

      А вот зачем понадобилось проверять что args[0] is args[1][0] для меня загадка.
      На таком фоне условие args and len(args) > 1 это так, мелочи.
      Хотя можно было сделать
      def __call__(self, arg1, arg2, *args, **kw):
      И никаких проверок не надо...
      Ответить
      • ОК... там очень долго объяснять, но фишка в том, что вокруг этого несчастного класса понаписано надцать оберток, которые переопределяют __call__() по-всякому. В итоге, в некоторых ситуациях один и тот же аргумент, который передается в эту функцию передается и как первый аргумент и как список из одного элемента - вторым аргументом. Ну как бы это сказать: человек писал, писал, творил, можно сказать, и в итоге вот так вот получилось, что хрен распутаешь.
        Т.е. что делает это условие: отлавливает те ситуации, когда вышеописаная неведомая херня таки случилась, и убирает второй аргумент (т.как он и не нужен никогда, он случайно туда попал).
        Ответить

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