从字符串执行 python 方法

Execute python method from a string

我有一个字符串,其中包含方法名称和值。目前,我正在使用以下实现,但看起来并不优雅。有没有更好的方法来实现这个?

class ObjectResolver:

    def methodResolver(self, value):
        """Some logic here"""
        print(value)


objectResolver = ObjectResolver()

channel = 'methodResolver(helloWorld)'

findValue = channel.strip().find('(')
objectMethod = channel.strip()[:findValue]
attribute = channel.strip()[findValue:][1:-1]

channelResolver = getattr(objectResolver, objectMethod)(attribute)

输出:

helloWorld

您可以使用 eval()exec()

class ObjectResolver:

def methodResolver(self, value):
    """Some logic here"""
    print(value)


objectResolver = ObjectResolver()

// Something like this...
channel = eval('methodResolver')(helloWorld)
// OR
exec('channel = "methodResolver(helloWorld)"')

findValue = channel.strip().find('(')
objectMethod = channel.strip()[:findValue]
attribute = channel.strip()[findValue:][1:-1]
channelResolver = getattr(objectResolver, objectMethod)(attribute)

详细了解 eval and exec

我发现最好的方法是在这里使用eval,具体针对我上面的问题,实现如下:

class ObjectResolver:

    def methodResolver(self, value):
        """Some logic here"""
        print(value)


objectResolver = ObjectResolver()

channel = "methodResolver('helloWorld')"
handlers = dict(methodResolver=objectResolver.methodResolver)
eval(channel, handlers)