2017-11-26 8 views
1

私は、ハードウェアを操作するための抽象関数を提供する親クラスと、この親クラスをサブクラス化するクラスでいっぱいのディレクトリを持ち、ハードウェア固有の実装を提供します機能...)。私はディレクトリ内のファイルをインポートするPythonの方法を探していて、それらをインスタンス化します。ファイルを整理してサブクラスで整理するためのきれいな方法

現在、親クラスは最上位ディレクトリにあり、子クラスを持つファイルはサブディレクトリにあります。これは、スタイルや実装の容易さのために変更することができます。

ハードウェア固有のクラスをすべてサブディレクトリにロードするのは、コンフィギュレーションファイルでそれらのリストを定義し、それを反復してインポートする方が望ましいですか?あるいは、importlibを使って自動的にそれを行う方が良いでしょうか?それとも問題じゃないの?

答えて

1

ビルドフォルダ構造:

. 
├── arm (i kept this one empty, see similar x86 folder) 
├── hal 
│   ├── flags.py 
│   ├── __init__.py 
│   └── registers.py 
├── x86 
│   ├── flags.py 
│   ├── __init__.py 
│   └── registers.py 
└── 8086.py 

は、armフォルダ内の自分のARMモジュールを入れたx86モジュールx86フォルダ内のように。

ハードウェアの親クラスは、ツリー内にhalというフォルダで表される並列フォルダに入れます。おそらくhalフォルダ内の汎用モジュールと同じ名前の各アーチ(それぞれのフォルダ内)に固有のモジュールがあることに注目してください(これは単なる提案にすぎません)。

親フォルダの8086.pyなどのファイルにハードウェアを構築します。

from x86 import Ax, Bx, ZF # only the classes you need 

ax = Ax() 
bx = Bx() 

# build your remaining CPU... 

サンプルhal/flags.pyの:

class ZeroFlag(): 
    pass 

サンプルhal/registers.pyの:

class Register: 
    pass 
hal/__init__.py

サンプルの:

from hal.registers import Register 
from hal.flags import ZeroFlag 
コードのサンプル

それぞれで今x86/__init__.py

from .registers import * 
from .flags import * 

x86/registers.py

from hal import Register 

class Ax(Register): 
    pass 

class Bx(Register): 
    pass 

サンプルのx86/flags.py

from hal import ZeroFlag 

class ZF(ZeroFlag): 
    pass 

サンプルのサンプルは、特定のモジュールがhalからジェネリッククラスを継承してカスタマイズすることができますアーチ。一番上のフォルダモジュールでは、これらの仕様をインポートして、CPUやハードウェアを構築します。

__init__.pyファイルの重要性に注目してください。フォルダをパッケージに変換します。 __init__もパッケージのインポート時に実行されるため、インポータで使用可能にするすべてのパッケージモジュールを指定できます。このリストでは、インポータにすべての名前をインポートさせることはありません。これは、必要なものだけを指定することができます。

ファイルがたくさんある場合は、__init__.pyファイルにコードを入れて、手動で書き込むのではなく読み込みを自動化することができます。

1

サブクラスを異なるファイルに分割し、必要なものだけをインポートするという基本的な考え方は非常に難しいです。あなたのサブクラスのフォルダにある__init__.pyファイルをimport SubClass1, SubClass2, SubClass3, ...コマンドで使用することを検討してください。次に、あなただけのmain.pyに言うことができます:

import folderOfSubClasses 

その後__init__.pyファイルが実行され、あなたが期待する結果を持っています。

私はあなたを助けてくれることを願っています!このような

関連する問題