私はこのように設定されたパッケージの実装を検討しています:
wordproc
__init__.py
_generic.py
gedit.py
oofice.py
word.py
_generic.pyには、次のようなクラスがあります。
class WordProc (object):
def __init__ (self):
pass
def createNewDoc (self):
print "createNewDoc unimplemented in current interface"
def getWordCount (self):
print "getWordCount unimplemented in current interface"
etc...
これらは、示されているように印刷されたり、エラーが発生したりする可能性があります。アプリ固有のモジュールは、_generic.WordProcから派生したWordProcクラスを含む_generic.pyのコピーになります。このようにして、機能は時間の経過とともに繰り返し実装され、実装されていないものに関するメッセージは単にアラートを生成します。
__init __。pyは、使用するモジュールを特定するために、次のものを(順番にリストして)検索できると想像しています。
- wordprocモジュール変数
- パス内の設定ファイル
- wordproc環境変数
- 環境を判別しようとする関数
- __init __。pyのデフォルト(おそらく_generic.py)
3は各アプリのモジュールの関数であるか、これらは特別に名前が付けられた環境テストスクリプト(例:env.py)を含むフォルダーに入れられ、__init__。pyがそれらをループする可能性があると思います。
次に、wordprocを使用してこれを簡単に実行できるようにしたいライブラリが必要です。
import wordproc as wp
wp.createNewDoc()
etc...
私が知らないのは、__init__。pyによって決定された適切なモジュールの適切なクラスにwpを解決させる方法です。これを行うのは意味がありません:
import wordproc.gedit as wp
これにより、wordprocのどのモジュールを使用するかを__init__。pyに決定させるという点が失われます。クラス継承のようなものが必要ですが、モジュールレベルです。