例如,我如何随机使用下面列出的四个函数之一(在类中)?
const newimages = images.map((i) => ({ source: i }))
我这样做的尝试出现了错误。为什么我会收到此错误,我该怎么办呢?
答案 0 :(得分:1)
b仍然是一个字符串。您需要将其评估为表达式:
a = random.randint(1, 4)
b = 'HI_' + str(a)
func = eval("Calculate.{}".format(b))
func(15, 7)
请注意,您不应在任何用户输入的字符串上使用eval()
,因为它可能会导致安全漏洞。
答案 1 :(得分:1)
您可以使用getattr()
,此外您的方法必须声明为staticmethod
:
import random
class Calculate():
@staticmethod
def HI_1(x, y):
return x + y
@staticmethod
def HI_2(x, y):
return x - y
@staticmethod
def HI_3(x, y):
return x * y
@staticmethod
def HI_4(x, y):
return x/y
a = random.randint(1, 4)
b = 'HI_' + str(a)
p = getattr(Calculate, b)(15, 7)
print(b, p)
答案 2 :(得分:0)
首先,您的方法应该是静态的,或者以self
作为第一个参数。修复后,您可以使用random.choice
来选择列表中的方法。这样做的好处是不依赖于方法'名。
import random
class Calculate:
@staticmethod
def add(x, y):
return x + y
@staticmethod
def sub(x, y):
return x - y
@staticmethod
def mult(x, y):
return x * y
@staticmethod
def div(x, y):
return x/y
@classmethod
def random_op(cls, x, y):
return random.choice([
cls.add,
cls.sub,
cls.mult,
cls.div
])(x, y)