<p>建立一个像这样的文件夹结构:</p>
<pre><code>.
├── 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
</code></pre>
<p>将ARM模块放入<code>arm</code>文件夹,x86模块放入<code>x86</code>文件夹,依此类推。在</p>
<p>将您的硬件父类放在一个并行文件夹中,在树中由<code>hal</code>文件夹表示。请注意,您可能为每个arch(在各自的文件夹中)拥有与<code>hal</code>文件夹中相同名称的通用模块的特定模块(但这只是一个建议)。在</p>
<p>{cd5>中的父文件夹。
<code>8086.py</code>代码示例:</p>
^{pr2}$
<p><code>hal/flags.py</code>示例:</p>
<pre><code>class ZeroFlag():
pass
</code></pre>
<p><code>hal/registers.py</code>示例:</p>
<pre><code>class Register:
pass
</code></pre>
<p><code>hal/__init__.py</code>示例:</p>
<pre><code>from hal.registers import Register
from hal.flags import ZeroFlag
</code></pre>
<p><code>x86/flags.py</code>的样本</p>
<pre><code>from hal import ZeroFlag
class ZF(ZeroFlag):
pass
</code></pre>
<p><code>x86/registers.py</code>的示例</p>
<pre><code>from hal import Register
class Ax(Register):
pass
class Bx(Register):
pass
</code></pre>
<p><code>x86/__init__.py</code>的示例</p>
<pre><code>from .registers import *
from .flags import *
</code></pre>
<p>现在在每个arch中,特定模块可以从<code>hal</code>继承和定制泛型类。在顶层的文件夹模块中,您可以导入这些细节来构建您的CPU或您正在制造的任何硬件。在</p>
<p>请注意<code>__init__.py</code>文件的重要性。他们把文件夹变成包裹。<code>__init__</code>还可以在包导入上运行,允许您指定要提供给导入程序的所有包模块。请注意,此列表不会强制进口商导入所有名称。它只能指定想要的。在</p>
<p>如果您有大量的文件,您可以将代码放入<code>__init__.py</code>文件中以自动执行导入,而不是手动编写它们。在</p>