首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中创建所有子类的实例

在Python中创建所有子类的实例
EN

Code Review用户
提问于 2015-07-13 23:19:48
回答 1查看 3.3K关注 0票数 8

我有一个有几个子类的超类。每个子类用一个不同的算法来覆盖“求解”方法,用于估计某个特定问题的解决方案。我希望高效地创建每个子类的实例,将这些实例存储在一个列表中,然后获取子类给出的估计值的总和(或平均值):

代码语言:javascript
复制
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])

结尾处的代码感觉非常笨重,特别是随着子类数量的增加。是否有更有效地创建所有实例的方法?

EN

回答 1

Code Review用户

回答已采纳

发布于 2015-07-13 23:32:40

你可以试试这个:

代码语言:javascript
复制
myTechniques = [cls() for cls in Technique.__subclasses__()]

注意,它不返回间接子类,只返回直接子类。您还可以考虑如果Technique的某些子类本身是抽象的,会发生什么。说到这一点,您应该使用ABCMetaabstractmethod

票数 12
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/96838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档