使用字符串来调用对象和函数

时间:2019-06-17 07:33:25

标签: python

我正在尝试通过不和谐方式获取用户输入,并使用自己制作的导入文件将其转换为命令。这些命令遵循“ XX![object] [function]命令。如何将输入的字符串转换为对象?或者有某种方式可以使用类似于getattr('x','y')的东西?

def function():
    x = "XX! profile view"
    getattr(x.lower().split(" ")[1], x.lower().split(" ")[2])()
    return

我希望可以像profile.view()一样执行,但是它给我错误AttributeError:'str'对象没有属性'view'。

2 个答案:

答案 0 :(得分:1)

最好不要使用函数字符串名称。正确的方法是创建将字符串名称与函数匹配的字典。

def XX(*args):
    print(list(reversed(*args)))


def YY(*args):
    print(list(map(str.upper, *args)))


router = {
    "XX": XX,
    "YY": YY
}


def interpret(string):
    if any(string.startswith(key) for key in router):
        func_name = string[0: string.index("!")]
        args = string[string.index("!") + 2:].split(" ")
        router[func_name](args)


x = "YY! profile view"

interpret(x)

答案 1 :(得分:0)

也许您想研究exec()函数:

mystring = r'print("Hello World")'

exec(mystring)

>>>> Hello World