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

use*_*096 3 python oop object-composition

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

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])
Run Code Online (Sandbox Code Playgroud)

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

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

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

NPE*_*NPE 5

你可以有一个工厂(一个砖厂?)并将其传递给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)
Run Code Online (Sandbox Code Playgroud)

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