在Python中用子类替换成员对象

我有以下问题,我将尝试使用以下示例进行说明.

class Brick():
    def __init__(self):
        self.weight = 1

class House():
    def __init__(self, number_bricks):
        self.bricks = [Brick() for i in range(number_bricks)]

    def get_weight(self):
        return reduce(lambda x,y: x+y, [brick.weight for brick in self.bricks])

但现在假设我创建了一种新的Brick,StrongBrick,以便我创建一个房子,一个子类StrongHouse,StrongBrick在StrongHouse扮演与Brick在House中扮演的角色完全相同的角色.我怎样才能以一种很好的方式做到这一点(不只是重新输入所有的类定义)?

所以基本的想法是,如何将一些由一些对象组成的类更改为同一个类但是由原始成员对象的子类组成?

非常感谢你能给我的任何帮助.

最佳答案
你可以有一个工厂(一个砖厂?)并将其传递给House .__ init __().

class Brick(object): pass

class StrongBrick(Brick): pass

class House(object):
    def __init__(self, brick_factory, num_bricks):
        self.bricks = [brick_factory() for i in range(num_bricks)]

house = House(Brick, 10000)
strong_house = House(StrongBrick, 10000)

正如您所看到的,甚至不需要继承House来构建不同类型砖块的房屋.

转载注明原文:在Python中用子类替换成员对象 - 代码日志