【问题标题】:Choose a random method from a class从类中选择一个随机方法
【发布时间】:2019-11-23 18:28:12
【问题描述】:

我有一个类有一些功能,像这样:

class valami:

    def a():
        *some code...*
    def b():
        *some code...*
    def c():
        *some code...*

我想从valami calss 中选择一个随机函数。我已经试过了:

random.choice((valami.a(), valami.b(), valami.c()))

但它同时调用了所有函数。

【问题讨论】:

  • 发生这种情况是因为valami.a 是实际函数的名称,并将该函数作为对象返回。 valami.a()调用该函数并返回调用该函数的结果

标签: python list class random


【解决方案1】:

您需要先在函数之间进行选择,然后调用选择的函数。

random.choice((valami.a, valami.b, valami.c))()

【讨论】:

    【解决方案2】:

    不要马上调用,只调用代码随机选择的函数:

    random.choice((valami.a, valami.b, valami.c))()
    

    如果你还不想调用它,只需去掉最后的一对括号,使其变为:

    random.choice((valami.a, valami.b, valami.c))
    

    【讨论】:

      【解决方案3】:

      您也可以将operator.methodcallerrandom.choice 一起使用

      methodcaller(choice(('a', 'b', 'c'))(valami)
      

      要延迟通话,只需提前拨打methodcaller

      method = methodcaller(choice(('a', 'b', 'c'))
      

      您甚至可以从其他地方获取方法名称:

      methods = 'a', 'b', 'c'
      method = methodcaller(choice(methods))
      

      然后只需调用类/实例上的方法:

      method(valami)
      

      【讨论】:

        猜你喜欢
        • 2011-10-06
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        • 2012-12-24
        • 1970-01-01
        • 2014-06-19
        • 2012-02-21
        相关资源
        最近更新 更多