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

    −112

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    def load_module(name, attrs=[], level = -1):
        """
        Динамически загружает модуль с указанным именем и его атрибуты.
        :param name: Имя модуля. Например: "catalog", "my.orders".
        :param attrs: Список атрибутов, которые необходимо загрузить.
        :param level: Указывает количество родительских дирректорий, в которых будет выполнен поиск модуля.
        :exception ImportError: При ошибке импорта модуля, например, когда не удалось найти указанный модуль.
        :return module: Модуль с атрибутами.
        """
        # Загружаем модуль. __import__ аналогичен вызову import или from xxx import yyy  только представлен в виде обычной функции
        module = __import__(name, globals(), locals(), attrs, level)
        # Если при загрузке модуля не были указаны атрибуты модуля, то загрузился корневой модуль.
        if not attrs:
            # Если в имени модуля присутствовали подмодули, то спускаемся по ним до искомого модуля.
            path_list = name.split('.')[1:]
            if path_list:
                # сильно замедренно, но какя понял вызываем модуль catalog.views если мы изначально загружаем catalog.views.product - т.е. товар
                # getattr(x, y) = x.y, поэтому getattr(catalog.views, product) = catalog.views.product
                module = reduce(lambda x, y: getattr(x, y), path_list, module)
        return module

    В принципе, закомментировано оно неплохо :D
    Извините, если не смешно. Я просто курнул немного травки.

    Запостил: cheerfulboy, 22 Июля 2012

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

    • Но зачем?
      Ответить
      • Что зачем?
        Ответить
        • Зачем эта функция нужна если import - это нормальный оператор, который можно вызывать в любом месте программы?

          try:
            import coollib
          except ImportError:
            import fallbacklib
          Ответить
          • А зачем ковёр красивый висит, а у него узоры такие сложные, как ткань времени?

            > Я просто курнул немного травки.
            Ответить
          • А если имя модуля хранится в переменной?
            Ответить
            • Ну нахрен?

              - Уважаемый пользователь.
              Мы знаем, Вы нихуя и не понимаете в том что такое питон, модули и импорт.
              Тем не менее, введите пожалуйста имя модуля который программа должна за коим-то хуем у вас запрашивать.
              Спасибо.
              _____________
              Ответить
              • для плагинов
                Ответить
                • Ну зачем ты ему подсказал?
                  Ответить
                • Ну вообще можно обойтись и без import'а с произвольной строкой.
                  1. определяем базовый класс для взаимодействия с плагином, скажем, BasePlugin.
                  2. Для этого класса определяем метакласс, который помимо своих основных обязанностей будет запоминать создаваемых потомков класса.
                  3. кладем __init__.py в папку plugins
                  4. кладем нужные модули в папку plugins
                  5. import plugins
                  Тогда для каждого класса-потомка BasePlugin, объявленного в процессе импорта модулей, будет произведено обращение к метаклассу. В итоге у нас будет список классов-плагинов, объявленных во всех файлах в папке plugins. Можно пользоваться.

                  Хотя, конечно, тоже ГК.
                  1. Если плагин выключен, то его файл все равно будет парситься.
                  2. Нельзя самостоятельно задать порядок загрузки, например для разрешения зависимостей.
                  3. Плагин с синтаксической ошибкой может завалить загрузку всех плагинов.
                  Ответить
              • То есть importlib.import_module — не нужна и это высер девелоперов педона, который нужно выпилить?
                Ответить
                • А вот это я запомню.
                  Черт, Питон уникален в плане возможностей почувствовать себя велосипедистом.
                  Ответить
                  • > Питон уникален в плане возможностей почувствовать себя велосипедистом

                    Клевета! Пьедестал почёта у PHP.
                    Ответить
    • > Я просто курнул немного травки.

      Надо гашиш жрать, не сажай лёгкие, брат.
      Ответить
      • показать все, что скрытоЫыыыы :)
        Ответить
      • Пропаганда веществ? ;)
        Закроют же говнокодик по новому закону.
        Ответить
        • Какая там пропаганда? Я же не написал, что при пероральном употреблении побочные эффекты практически отсутствуют, а замечательнейший трип длится до 8 часов!
          Ответить
          • Ты написал "надо".
            А вот про отсутствие побочных эффектов и трип - это скорее описание, а не побуждение/рекомендация.
            Ответить
            • Хм. Ну ладно.

              Пользователь Fai получает кляп на 24 часа, за нарушение правила 2.4.6 данного сайта.
              Ответить
              • Я тебя уже один раз предупреждал.
                Ответить
                • О_О ональная модерация на уютном говнокодике...

                  Пользователь bormand получает кляп на 24 часа, за нарушение правила 3.14.159 "запрещается обсуждение модераторов и их действий"
                  Ответить
                  • А ты думал это шутки?
                    Еще 2 недели назад всех предупредил - за несоблюдение правил буду наказывать.
                    Четвертый кляп за сегодня - это просто праздник какой-то.
                    Ответить
                    • Модег'атор, ви таки поц.
                      Ответить
                      • показать все, что скрытоПопередження: вивчи людську мову, жидок.
                        Ответить
                        • Модеrатор таки хохол-антисемит?
                          Ответить
                          • А rat4 и eth0 - виртуалы одного семёна?
                            Неймы по одному подобию, близкие id и главное - ip одинаковые.
                            Забаню обоих.
                            Ответить
                            • Себе забань, пёс.
                              Ответить
                              • Устроишь митинг?
                                Ответить
                              • Что самое смешное торагие друзья - ип ведь израильский.
                                Ответить
                                • Модеrатор таки эстонец-антисемит!
                                  Ответить
                                  • Ну вот как весело получается - сначала мне отвечает rat4 потом eth0, а потом снова rat4.
                                    И всё с одного израильского ip.
                                    Совпадение?
                                    Ответить
                                    • Каждому человеку по ip - это непростительное расточительство! У нас каждому провайдеру хватает одного ip.
                                      Ответить
                                      • man ipv6
                                        Там каждому атому по ip хватит...
                                        Ответить
                                        • >каждому атому по ip

                                          Кто таки оплатит такой праздник?
                                          Ответить
                                          • Если все атомы скинутся по одной копейке...
                                            Ответить
                                    • Шо ви хочите? Свой кговавый шекель не отдам!
                                      Ответить
                                    • А ви таки хотели, что бы вам два газных человека одновгеменно ответили?
                                      Ответить
                                      • > одновгеменно ответили
                                        eth0 40 минут назад
                                        vistefan 37 минут назад

                                        Ви таки мой клон! Я пготестую.
                                        Ответить
                    • Я бы посмотрел на ньюфага, впервые зашедшего на уютненький, и читающего этот тред. Особенно когда в конце ссылка не заработает и придётся чистить куки браузером.

                      Пользователь vistefan получает сотни нефти.
                      Ответить
                      • Сейчас пользователь vistefan получает заслуженные предупреждение и минуса, а в следующий раз будет кляп.
                        Причина: 'неуместное использование красного текста'
                        Ответить
                        • А самому разве можно красным писать?

                          Нет, можно только модераторам
                          Ответить
    • Если по-делу, то функция хороша, но комментариев слишком дохуя.
      Ответить
    • показать все, что скрытохуй
      Ответить
    • По pep8 все импорты должны быть в начале файла. Такой нежданчик никому нахуй не сдался.
      Ответить
      • Про плагины упустил. Игнорируйте коммент.
        Ответить
    • > reduce(lambda x, y: getattr(x, y), ...

      разве нельзя просто reduce(getattr, ...?
      Ответить

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