Такая ситуация.
Есть проект.
Он разбит на несколько модулей.
Есть какие-то функции (а может и модули), которые используются в нескольких модулях проекта.
Например, привычная функция ru:
def ru(t):
return t.decode('utf8')
Чтобы избежать дублирования кода, можно пойти следующим путём: создать один некий модуль General, куда поместить весь общий код.
Далее в модулях проекта пишем
from General import *
или
import General
кому как нравится,
и все дела.
Если подобного кода много, то это наиболее приемлемый вариант.
А если нужно лишь "обобщить" всего одну-две функции, типа той же ru?
Неплохим выходом будет такой финт ушами:
Определяем в главном модуле проекта (default.py например) функцию ru и "обобщаем" её:
import __builtin__
__builtin__.ru = ru
del __builtin__
или
__import__(__builtin__).ru = ru
То есть мы помещаем ссылку на функцию во встроенное пространство имён (ВПИ), доступ к которому предоставляет модуль __builtin__.
Плюсы:
.* ВПИ всегда доступно без явного импорта
.* нет лишнего файла
ответ опубликован:
Рейтинг: 5
голосов: 2
- 5
- 1
- 2
- 3
- 4
- 5

