使用用户输入从另一个.py文件中调用在不同.py文件中定义的特定函数

时间:2017-01-27 11:51:02

标签: python

我有一个包含一些函数的.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'

请提供一些有关如何解决此问题的见解。 感谢

2 个答案:

答案 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_evalRange.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()
#...