我在课堂上有很多不同的方法。每个方法都包含一个独特案例的函数。大小写作为一个简单的整数传递给构造函数,该整数标识应该使用哪个方法。 有没有更好的方法来设置调用此函数,然后只是一堆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方式吗?
答案 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))()