使用循环来确定要调用的函数

时间:2017-04-22 16:40:24

标签: python class

我在课堂上有很多不同的方法。每个方法都包含一个独特案例的函数。大小写作为一个简单的整数传递给构造函数,该整数标识应该使用哪个方法。 有没有更好的方法来设置调用此函数,然后只是一堆if语句?

class Class:
    def __init__(self, case):
        self.__case = case # case is a integer from 1 to 10
        if case == 1:
            self.case1()
        elif case == 2:
            self.case2()
        elif case == 3:
            self.case3() 
        ...
        elif case == 10:
            self.case10():

    def case1(self):
        ...
    def case2(self):
        ...
    def case10(self):

代码可以工作但是非常冗余。有更多的pythonic方式吗?

1 个答案:

答案 0 :(得分:2)

是的,有更好的方法。

如果您的方法名称不遵循模式但有固定数量的模式,请使用列表,然后使用case作为索引:

cases = [None, self.case1, self.case2, ..., self.case10]
cases[case]()

你可以使用装饰者预先建立这个列表,但是你必须首先确保View

class Class:
    def __init__(self, case):
        self._cases[case].__get__(self)()

    def case1(self):
        ...
    def case2(self):
        ...
    def case10(self):
        ...

    _cases = [case1, case2, ..., case10]

如果您的方法确实是按顺序编号的,您可以生成方法名称并使用getattr()来查找方法:

getattr(self, 'case{}'.format(case))()