Python如何从包含参数的字符串调用类方法

Pre*_*cks 2 python eval

我有以下代码。评估命令变量及其包含的参数的最佳方法是什么。

这是一个人为的例子,但却是解释我想要在更大范围内做的事情的最简单方法。

class Job():
  def random_number(self, start, end, prec=0):
    number = round(random.uniform(start,end),prec)
    if(prec == 0):
      return int(number)
    return number

  def run(self, command):
    #command = "self.random_number(1,10,0)"
    #**************
    # What would be the best way to 'eval' the content of the 'command' variable and the parameters it contains?
    #**************

job = Job()
job.run("self.random_number(1,10,0)")
Run Code Online (Sandbox Code Playgroud)

Jan*_*Jan 5

一般来说,这似乎是一个坏主意,请考虑重组您的代码。也就是说,您可以getattr(...)结合使用将字符串拆分为函数和参数部分:

import random, re

class Job():
    def random_number(self, start, end, prec=0):
        number = round(random.uniform(start, end), prec)
        if (prec == 0):
            return int(number)
        return number

    def run(self, command):
        fun, params, _ = re.split(r'[()]', command)
        params = map(int, params.split(","))

        func = getattr(Job, fun)
        print(func(*params))

job = Job()
job.run("random_number(1,10,0)")
Run Code Online (Sandbox Code Playgroud)

显然,您需要添加一些错误管理(不存在的损坏字符串、函数、浮点数而不是整数 - 您明白了)。

  • 谢谢,这就是我正在寻找的正则表达式。这将对我有很大帮助,我正在积极地重新设计代码,但我只需要它来克服最初的障碍。 (2认同)