Вывод ответа #1864154392

-

Ноу хау - от мастеров на заметку

Небольшие рецепты полезных решений

Virtuos86


Репутация: 101
репутация: 101
| на сайте с 2008 года | последнее посещение: 07:03 17 ноя 2024
сообщений: 802

Пост № 1864154392

Такая ситуация.
Есть проект.
Он разбит на несколько модулей.
Есть какие-то функции (а может и модули), которые используются в нескольких модулях проекта.

Например, привычная функция 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