我有一个使用其他python文件的python代码。我可以使用import语句将第二个文件导入第一个文件,但是目前的情况是我不知道第二个文件将是什么。期望该文件将在Makefile中提供。在C / C ++中,我们可以使用-i / -l选项重新编译。我不确定如何在python中完成类似的工作。
这是示例代码: 有效的方法: myclass.py
class myclass:
def __init__(self):
self.x = 10
def add(self, num):
self.x += num
def get(self):
return self.x
usemyclass.py
import sys
import myclass
c = myclass.myclass()
c.add(10)
print (c.get())
我现在可以通过在usemyclass.py上调用python解释器来运行代码
python usemyclass.py
我想要的是:
usemyclass.py
(请勿导入myclass.py,但在调用python时将其传递)
import sys
c = myclass.myclass()
c.add(10)
print (c.get())
现在运行
python myclass.py usemyclass.py
(或类似的东西)
我想让用户可以选择传递任何python文件(对必须实现的类结构有所限制)。例如,第二个用户可能会如下所示编写myclass2.py
myclass2.py
class myclass: # They specify the same class name
def __init__(self):
self.x = 1000
def add(self, num):
self.x = (self.x + num)%2000
def get(self):
return self.x
答案 0 :(得分:0)
您想要的被称为动态导入。最小的工作代码是:
to_import = 'my_class_1.py'
exec('import {} as myclass'.format(to_import.split('.')[0]))
...
当然,您必须从命令行(例如,使用argparse
)解析文件名并正确处理它们。另外,由于文件名是由用户输入的,因此您可能会添加异常处理,以便更紧密地模仿文件名并使其更安全(或者至少要注意使用exec
的潜在不安全性)。