- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 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
> Я просто курнул немного травки.
- Уважаемый пользователь.
Мы знаем, Вы нихуя и не понимаете в том что такое питон, модули и импорт.
Тем не менее, введите пожалуйста имя модуля который программа должна за коим-то хуем у вас запрашивать.
Спасибо.
_____________
1. определяем базовый класс для взаимодействия с плагином, скажем, BasePlugin.
2. Для этого класса определяем метакласс, который помимо своих основных обязанностей будет запоминать создаваемых потомков класса.
3. кладем __init__.py в папку plugins
4. кладем нужные модули в папку plugins
5. import plugins
Тогда для каждого класса-потомка BasePlugin, объявленного в процессе импорта модулей, будет произведено обращение к метаклассу. В итоге у нас будет список классов-плагинов, объявленных во всех файлах в папке plugins. Можно пользоваться.
Хотя, конечно, тоже ГК.
1. Если плагин выключен, то его файл все равно будет парситься.
2. Нельзя самостоятельно задать порядок загрузки, например для разрешения зависимостей.
3. Плагин с синтаксической ошибкой может завалить загрузку всех плагинов.
Черт, Питон уникален в плане возможностей почувствовать себя велосипедистом.
Клевета! Пьедестал почёта у PHP.
Надо гашиш жрать, не сажай лёгкие, брат.
Закроют же говнокодик по новому закону.
А вот про отсутствие побочных эффектов и трип - это скорее описание, а не побуждение/рекомендация.
Пользователь Fai получает кляп на 24 часа, за нарушение правила 2.4.6 данного сайта.
Пользователь bormand получает кляп на 24 часа, за нарушение правила 3.14.159 "запрещается обсуждение модераторов и их действий"
Еще 2 недели назад всех предупредил - за несоблюдение правил буду наказывать.
Четвертый кляп за сегодня - это просто праздник какой-то.
Неймы по одному подобию, близкие id и главное - ip одинаковые.
Забаню обоих.
И всё с одного израильского ip.
Совпадение?
Там каждому атому по ip хватит...
Кто таки оплатит такой праздник?
eth0 40 минут назад
vistefan 37 минут назад
Ви таки мой клон! Я пготестую.
Нет я!
Нет я!
Пользователь vistefan получает сотни нефти.
Нет, можно только модераторам
разве нельзя просто reduce(getattr, ...?