用子类组织和加载文件的干净方法

2024-03-28 17:47:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个父类,它提供了操作硬件的抽象函数,还有一个目录,其中包含了这个父类的子类,并提供了特定于硬件的实现(例如x86函数、ARM函数…)。我正在寻找一种Pythonic方法来导入目录中的文件,并实例化它们。在

此时父类在顶层目录中,子类在子目录中的文件。这是可以改变的,因为风格或易于实现。在

最好是通过在配置文件中定义一个特定于硬件的类的列表,然后迭代导入它们来加载子目录中的所有类吗?是自动地做更重要的事?还是无关紧要?在


Tags: 文件实例方法函数目录硬件定义风格
2条回答

将子类划分到不同的文件中并只导入所需内容的基本思想非常python。考虑使用子类文件夹中的__init__.py文件,其中包含import SubClass1, SubClass2, SubClass3, ...-命令。然后你可以在main.py中说:

import folderOfSubClasses

然后,__init__.py文件将被执行,您将得到预期的结果。在

我希望我能帮助你!在

建立一个像这样的文件夹结构:

.
├── 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文件夹表示。请注意,您可能为每个arch(在各自的文件夹中)拥有与hal文件夹中相同名称的通用模块的特定模块(但这只是一个建议)。在

{cd5>中的父文件夹。 8086.py代码示例:

^{pr2}$

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/flags.py的样本

from hal import ZeroFlag

class ZF(ZeroFlag):
    pass

x86/registers.py的示例

from hal import Register

class Ax(Register):
    pass

class Bx(Register):
    pass

x86/__init__.py的示例

from .registers import *
from .flags import *

现在在每个arch中,特定模块可以从hal继承和定制泛型类。在顶层的文件夹模块中,您可以导入这些细节来构建您的CPU或您正在制造的任何硬件。在

请注意__init__.py文件的重要性。他们把文件夹变成包裹。__init__还可以在包导入上运行,允许您指定要提供给导入程序的所有包模块。请注意,此列表不会强制进口商导入所有名称。它只能指定想要的。在

如果您有大量的文件,您可以将代码放入__init__.py文件中以自动执行导入,而不是手动编写它们。在

相关问题 更多 >