如何从类中运行随机方法?

时间:2018-04-13 01:55:00

标签: python python-3.x

例如,我如何随机使用下面列出的四个函数之一(在类中)?

const newimages = images.map((i) => ({ source: i }))

我这样做的尝试出现了错误。为什么我会收到此错误,我该怎么办呢?

3 个答案:

答案 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)