- 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
Vindicar 22.07.2012 16:26 # +2
cheerfulboy 22.07.2012 16:28 # 0
Vindicar 22.07.2012 17:33 # +4
Fai 22.07.2012 18:44 # +3
> Я просто курнул немного травки.
cheerfulboy 22.07.2012 21:12 # 0
Fai 22.07.2012 21:15 # +5
- Уважаемый пользователь.
Мы знаем, Вы нихуя и не понимаете в том что такое питон, модули и импорт.
Тем не менее, введите пожалуйста имя модуля который программа должна за коим-то хуем у вас запрашивать.
Спасибо.
_____________
TarasB 22.07.2012 21:18 # +2
Fai 22.07.2012 21:33 # +4
cheerfulboy 22.07.2012 21:52 # −1
Fai 22.07.2012 22:52 # −3
USB 23.07.2012 00:35 # −7
Vindicar 24.07.2012 11:06 # 0
1. определяем базовый класс для взаимодействия с плагином, скажем, BasePlugin.
2. Для этого класса определяем метакласс, который помимо своих основных обязанностей будет запоминать создаваемых потомков класса.
3. кладем __init__.py в папку plugins
4. кладем нужные модули в папку plugins
5. import plugins
Тогда для каждого класса-потомка BasePlugin, объявленного в процессе импорта модулей, будет произведено обращение к метаклассу. В итоге у нас будет список классов-плагинов, объявленных во всех файлах в папке plugins. Можно пользоваться.
Хотя, конечно, тоже ГК.
1. Если плагин выключен, то его файл все равно будет парситься.
2. Нельзя самостоятельно задать порядок загрузки, например для разрешения зависимостей.
3. Плагин с синтаксической ошибкой может завалить загрузку всех плагинов.
cheerfulboy 22.07.2012 21:19 # +3
Vindicar 23.07.2012 12:23 # 0
Черт, Питон уникален в плане возможностей почувствовать себя велосипедистом.
roman-kashitsyn 23.07.2012 12:26 # +4
Клевета! Пьедестал почёта у PHP.
Fai 22.07.2012 16:32 # −2
Надо гашиш жрать, не сажай лёгкие, брат.
cheerfulboy 22.07.2012 16:33 # −5
bormand 22.07.2012 20:33 # +2
Закроют же говнокодик по новому закону.
Fai 22.07.2012 21:05 # +2
SmackMyBitchUp 23.07.2012 13:51 # 0
А вот про отсутствие побочных эффектов и трип - это скорее описание, а не побуждение/рекомендация.
Fai 23.07.2012 14:08 # +4
Пользователь Fai получает кляп на 24 часа, за нарушение правила 2.4.6 данного сайта.
moderator 23.07.2012 14:55 # +2
bormand 23.07.2012 15:10 # +4
Пользователь bormand получает кляп на 24 часа, за нарушение правила 3.14.159 "запрещается обсуждение модераторов и их действий"
moderator 23.07.2012 15:36 # +2
Еще 2 недели назад всех предупредил - за несоблюдение правил буду наказывать.
Четвертый кляп за сегодня - это просто праздник какой-то.
eth0 23.07.2012 16:57 # +2
moderator 23.07.2012 17:07 # −5
rat4 23.07.2012 17:09 # +4
moderator 23.07.2012 17:22 # 0
Неймы по одному подобию, близкие id и главное - ip одинаковые.
Забаню обоих.
eth0 23.07.2012 21:35 # +1
SmackMyBitchUp 23.07.2012 21:39 # +2
moderator 30.07.2012 18:52 # +2
rat4 30.07.2012 19:07 # +2
moderator 30.07.2012 19:18 # +1
И всё с одного израильского ip.
Совпадение?
rat4 30.07.2012 19:40 # +2
bormand 30.07.2012 19:43 # 0
Там каждому атому по ip хватит...
rat4 30.07.2012 20:15 # 0
Кто таки оплатит такой праздник?
bormand 30.07.2012 20:27 # 0
eth0 30.07.2012 19:42 # +3
vistefan 30.07.2012 19:44 # 0
eth0 30.07.2012 20:22 # 0
eth0 40 минут назад
vistefan 37 минут назад
Ви таки мой клон! Я пготестую.
rat4 30.07.2012 20:24 # 0
Нет я!
vistefan 30.07.2012 20:36 # 0
Нет я!
vistefan 23.07.2012 17:01 # −3
Пользователь vistefan получает сотни нефти.
moderator 23.07.2012 17:05 # −3
Fai 23.07.2012 17:22 # 0
Нет, можно только модераторам
Fai 22.07.2012 17:24 # +1
cheerfulboy 22.07.2012 21:13 # 0
anonimb84a2f6fd141 23.07.2012 01:33 # −7
Yurik 23.07.2012 01:54 # −2
Yurik 23.07.2012 02:17 # 0
someone 23.07.2012 09:46 # +3
разве нельзя просто reduce(getattr, ...?