我有一个有几个子类的超类。每个子类用一个不同的算法来覆盖“求解”方法,用于估计某个特定问题的解决方案。我希望高效地创建每个子类的实例,将这些实例存储在一个列表中,然后获取子类给出的估计值的总和(或平均值):
class Technique():
def __init__(self):
self.weight = 1
def solve(self, problem):
pass
class Technique1(Technique):
def __init__(self):
super()
def solve(self,problem):
return 1
class Technique2(Technique):
def __init__(self):
super()
def solve(self,problem):
return 6
class Technique3(Technique):
def __init__(self):
super()
def solve(self,problem):
return -13
testCase = 3
myTechniques = []
t1 = Technique1()
myTechniques.append(t1)
t2 = Technique1()
myTechniques.append(t2)
t3 = Technique1()
myTechniques.append(t3)
print(sum([t.solve(testCase) for t in myTechniques])结尾处的代码感觉非常笨重,特别是随着子类数量的增加。是否有更有效地创建所有实例的方法?
发布于 2015-07-13 23:32:40
你可以试试这个:
myTechniques = [cls() for cls in Technique.__subclasses__()]注意,它不返回间接子类,只返回直接子类。您还可以考虑如果Technique的某些子类本身是抽象的,会发生什么。说到这一点,您应该使用ABCMeta和abstractmethod。
https://codereview.stackexchange.com/questions/96838
复制相似问题