gpt4 book ai didi

python - 在Python 3.2中,如何从指定文件动态打开和编译类?

转载 作者:行者123 更新时间:2023-11-30 23:44:37 25 4
gpt4 key购买 nike

代码比英文精确得多;这就是我想做的:

import sys

fileName = sys.argv[1]
className = sys.argv[2]

# open py file here and import the class
# ???

# Instantiante new object of type "className"
a = eval(className + "()") # I don't know if this is the way to do that.

# I "know" that className will have this method:
a.writeByte(0x0)

编辑:

根据答案的要求,这就是我想要做的:

我正在编写一个遵循 SIC/XE 指令集的虚拟处理器。它是一种教育理论处理器,用于向计算机科学专业的学生教授汇编语言和系统软件的基础知识。我试图从“处理器”的编程中抽象出“设备”的概念。本质上,我希望我的程序的用户能够编写自己的设备插件(仅限于“read_byte”和“write_byte”功能),然后我希望他们能够通过命令将他们的设备“连接”到处理器-line time,这样他们就可以写出如下内容:

python3 sicsim -d1 dev1module Dev1Class -d2 ...

他们还将提供内存镜像,该镜像知道如何与他们的设备交互。我基本上希望我们俩都能够编写我们的代码而不互相干扰。

最佳答案

使用importlib.import_module和内置函数 getattr 。不需要eval

import sys
import importlib

module_name = sys.argv[1]
class_name = sys.argv[2]

module = importlib.import_module(module_name)
cls = getattr(module, class_name)

obj = cls()
obj.writeByte(0x0)

这将要求该文件位于您的 python 路径上的某个位置。大多数时候,当前目录位于所述路径上。如果这还不够,您必须从中解析目录并将其附加sys.path。我很乐意提供帮助。只需给我第一个命令行参数的示例输入即可。

此版本的有效输入类似于:

python3 myscript.py mypackage.mymodule MyClass

关于python - 在Python 3.2中,如何从指定文件动态打开和编译类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10059497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com