Я делаю пакет в Python 2.7, предназначенный для замены PyCLIPS в ограниченном объеме.
Этот пакет использует функции верхнего уровня, чтобы к экспертной системе CLIPS можно было получить более прямой доступ. Запуск from clips import *
означает, что такие функции, как Assert()
, которые будут утверждать факт в экспертной системе, могут использоваться с верхнего уровня.
Мне нужно пересоздать это, чтобы я мог просто заменить from clips import *
с from PyCLIPS2 import *
в каком-то устаревшем коде и, надеюсь, больше ничего не изменить.
В настоящее время структура моего пакета выглядит следующим образом:
PyCLIPS2
├── __init__.py [1]
├── system
| ├── __init__.py [2]
| └── main.py
└── tests
├── __init__.py [3]
└── test_all.py
Внутри __init__.py [1]
У меня сейчас
from system import *
_main_object = Main()
def Assert(assertion):
return _main_object.Facts.Assert(assertion)
Это позволяет мне делать то, что я хочу. Это означает, что когда я импортирую пакет, он инициализирует экземпляр Main()
и привязывает функции верхнего уровня к соответствующим функциям / методам внутри него.
Проблема в том, что этих функций много /методы. Если я продолжу в том же духе, мне придется написать одну из этих функций внутри __init__.py
для каждой функции или метода, к которому я хочу получить доступ на высшем уровне. Я также собираюсь держать их в курсе, если что-то изменится.
Я уверен, что есть гораздо лучший способ сделать это, который, надеюсь, не требует, чтобы я записывал каждую из этих функций и поддерживал их. Если у кого-то есть какие-либо предложения по получению доступа к этим функциям с верхнего уровня, который является более питоническим или приводит к более ясному пространству имен или просто менее ужасен, я действительно хотел бы услышать их :) (альтернативно, что-то, что может написать эти функции длямне бы тоже очень помогли) Спасибо.