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

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
  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 cheerfulboy, (Updated )

Комментарии (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 недели назад всех предупредил - за несоблюдение правил буду наказывать.
                  Четвертый кляп за сегодня - это просто праздник какой-то.
                  Ответить
                        • А rat4 и eth0 - виртуалы одного семёна?
                          Неймы по одному подобию, близкие id и главное - ip одинаковые.
                          Забаню обоих.
                          Ответить
                            • Что самое смешное торагие друзья - ип ведь израильский.
                              Ответить
                                • Ну вот как весело получается - сначала мне отвечает rat4 потом eth0, а потом снова rat4.
                                  И всё с одного израильского ip.
                                  Совпадение?
                                  Ответить
                                  • Каждому человеку по ip - это непростительное расточительство! У нас каждому провайдеру хватает одного ip.
                                    Ответить
                                  • Шо ви хочите? Свой кговавый шекель не отдам!
                                    Ответить
                                  • А ви таки хотели, что бы вам два газных человека одновгеменно ответили?
                                    Ответить
                  • Я бы посмотрел на ньюфага, впервые зашедшего на уютненький, и читающего этот тред. Особенно когда в конце ссылка не заработает и придётся чистить куки браузером.

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

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

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

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8