但是现在假设我创建了一种新的Brick
, StrongBrick
,这样我就创建了一个房子,一个子类StrongHouse
,在其中扮演的角色与在中扮演StrongBrick
的角色完全相同。我怎样才能以一种好的方式做到这一点(不仅仅是重新输入所有的类定义)?StrongHouse
Brick
House
正如所有其他答案所解释的那样,您根本不想创建这种并行层次结构。但是要回答您的直接问题:您可以动态创建类,因此您可以创建并行层次结构,而无需复制和粘贴所有类定义。毕竟,类是一流的对象。
再次强调,您几乎肯定不想这样做,而我只是表明这是可能的。
def make_house_class(brick_type):
class NewHouse(House):
def __init__(self, number_bricks):
self.bricks = [brick_type() for i in range(number_bricks)]
return NewHouse
现在,您可以静态创建所有房屋类型:
StrongHouse = make_house_class(StrongBrick)
CheapHouse = make_house_class(CheapHouse)
# ...
……或者也许从所有砖块类型的集合中动态构建它们:
brick_types = (StrongBrick, CheapBrick)
house_types = {brick_type: make_house_class(brick_type) for brick_type in brick_types}
… 甚至添加一些 hacky introspection 来为当前模块中的FooHouse
每个类型创建一个新类型:FooBrick
for name, value in globals().items():
if name.endswith('Brick') and name != 'Brick' and isinstance(value, type):
globals()[name.replace('Brick', 'House')] = make_house_class(value)
……甚至在工厂制造商中根据需要即时创建它们:
def make_house_factory(brick_type):
house_type = make_house_class(brick_type)
def factory(number_bricks):
return house_type(number_bricks, brick_type)
return factory
……甚至是生成的工厂:
def make_house_factory(brick_type):
def factory(number_bricks):
return make_house_class(brick_type)(number_bricks, brick_type)
return factory