ビルドフォルダ構造:
.
├── 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
ファイルにコードを入れて、手動で書き込むのではなく読み込みを自動化することができます。