我有一个包含一些函数的.py文件。它看起来像是: -
class Test_suites():
def fun1():
print("hello fun1 here")
def fun2():
print("hello fun2 here")
def fun3():
print("hello fun3 here")
def fun4():
print("hello fun4 here")
现在我有另一个文件从用户那里获取输入并尝试从第一个python文件调用该特定函数。它看起来像: -
from test_suites import Test_Suites
ob=Test_Suites()
dictionary={1:'fun1',2:'fun2',3:'fun3',4:'fun4'}
user_input=eval(input("enter the test case number"))
string=dictionary[user_input]
ob.string()
但它抛出一个错误:-ImportError:无法导入名称'Test_Suites'
请提供一些有关如何解决此问题的见解。 感谢
答案 0 :(得分:0)
在您的代码中string
是一个字符串,其中包含您要调用的函数的名称。 ob.string()
在对象ob
上查找函数名称字符串。要从对象name
获取名称为obj
的属性,请使用getattr(obj, name)
,所以在您的情况下:
getattr(ob, string)()
同样正如Tagc在评论eval
中指出的那样,你使用它的方式是个坏主意。而是使用user_input=int(input("enter the test case number"))
将给定字符串解析为整数。
如果您需要更灵活的内容,可以使用ast module中的ast.literal_eval
,Range.ClearHyperlinks
也可以解析列表,词组,...(https://docs.python.org/3/library/ast.html#ast.literal_eval)
答案 1 :(得分:0)
就像我在评论中所说,使用getattr
按名称访问函数。
#test_suites.py
def fun1():
print("hello fun1 here")
def fun2():
print("hello fun2 here")
def fun3():
print("hello fun3 here")
def fun4():
print("hello fun4 here")
import test_suites
func1 = getattr(test_suites, 'func1')
# call func1()
#...