2024-03-28 17:47:07 发布
网友
我有一个父类,它提供了操作硬件的抽象函数,还有一个目录,其中包含了这个父类的子类,并提供了特定于硬件的实现(例如x86函数、ARM函数…)。我正在寻找一种Pythonic方法来导入目录中的文件,并实例化它们。在
此时父类在顶层目录中,子类在子目录中的文件。这是可以改变的,因为风格或易于实现。在
最好是通过在配置文件中定义一个特定于硬件的类的列表,然后迭代导入它们来加载子目录中的所有类吗?是自动地做更重要的事?还是无关紧要?在
将子类划分到不同的文件中并只导入所需内容的基本思想非常python。考虑使用子类文件夹中的__init__.py文件,其中包含import SubClass1, SubClass2, SubClass3, ...-命令。然后你可以在main.py中说:
__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文件夹,依此类推。在
arm
x86
将您的硬件父类放在一个并行文件夹中,在树中由hal文件夹表示。请注意,您可能为每个arch(在各自的文件夹中)拥有与hal文件夹中相同名称的通用模块的特定模块(但这只是一个建议)。在
hal
{cd5>中的父文件夹。 8086.py代码示例:
8086.py
hal/flags.py示例:
hal/flags.py
class ZeroFlag(): pass
hal/registers.py示例:
hal/registers.py
class Register: pass
hal/__init__.py示例:
hal/__init__.py
from hal.registers import Register from hal.flags import ZeroFlag
x86/flags.py的样本
x86/flags.py
from hal import ZeroFlag class ZF(ZeroFlag): pass
x86/registers.py的示例
x86/registers.py
from hal import Register class Ax(Register): pass class Bx(Register): pass
x86/__init__.py的示例
x86/__init__.py
from .registers import * from .flags import *
现在在每个arch中,特定模块可以从hal继承和定制泛型类。在顶层的文件夹模块中,您可以导入这些细节来构建您的CPU或您正在制造的任何硬件。在
请注意__init__.py文件的重要性。他们把文件夹变成包裹。__init__还可以在包导入上运行,允许您指定要提供给导入程序的所有包模块。请注意,此列表不会强制进口商导入所有名称。它只能指定想要的。在
__init__
如果您有大量的文件,您可以将代码放入__init__.py文件中以自动执行导入,而不是手动编写它们。在
将子类划分到不同的文件中并只导入所需内容的基本思想非常python。考虑使用子类文件夹中的
__init__.py
文件,其中包含import SubClass1, SubClass2, SubClass3, ...
-命令。然后你可以在main.py
中说:然后,
__init__.py
文件将被执行,您将得到预期的结果。在我希望我能帮助你!在
建立一个像这样的文件夹结构:
将ARM模块放入
arm
文件夹,x86模块放入x86
文件夹,依此类推。在将您的硬件父类放在一个并行文件夹中,在树中由
hal
文件夹表示。请注意,您可能为每个arch(在各自的文件夹中)拥有与hal
文件夹中相同名称的通用模块的特定模块(但这只是一个建议)。在{cd5>中的父文件夹。
^{pr2}$8086.py
代码示例:hal/flags.py
示例:hal/registers.py
示例:hal/__init__.py
示例:x86/flags.py
的样本x86/registers.py
的示例x86/__init__.py
的示例现在在每个arch中,特定模块可以从
hal
继承和定制泛型类。在顶层的文件夹模块中,您可以导入这些细节来构建您的CPU或您正在制造的任何硬件。在请注意
__init__.py
文件的重要性。他们把文件夹变成包裹。__init__
还可以在包导入上运行,允许您指定要提供给导入程序的所有包模块。请注意,此列表不会强制进口商导入所有名称。它只能指定想要的。在如果您有大量的文件,您可以将代码放入
__init__.py
文件中以自动执行导入,而不是手动编写它们。在相关问题 更多 >
编程相关推荐