我宁愿这样做
class A:
def __init__(self):
self._TESTS = {
'val1': self.test1,
#...
'val10': self.test10
}
def test(self, x):
for v, f in self._TESTS.items():
if f(x):
return v
return None
在这之上
class A:
def test(self, x):
if self.test1(x):
return 'val1'
#...
if self.test10(x):
return 'val10'
return None
但是我需要按特定顺序调用 test* 方法。你会怎么做?
我可以使用 collections.OrderedDict,但实际上我根本不用字典,因为我总是一次调用所有测试。那么,也许是一个元组列表?
请您参考如下方法:
是的,使用 tuples 列表,保留顺序,不需要 dict,因为不需要查找。循环略有不同,不再是.items()而是直接解包:
class A:
def __init__(self):
self._TESTS = [
('val1', self.test1),
#...
('val10', self.test10)
]
def test(self, x):
for v, f in self._TESTS:
if f(x):
return v
return None
