【发布时间】:2013-08-26 12:19:40
【问题描述】:
我有一个基类,我想从中创建许多子类。子类的不同之处仅在于实例化期间用于调用基类的参数。下面的例子展示了如何创建一个子类Apple。有没有办法以编程方式执行此操作,而无需编写子类的 __init__ 方法?这似乎是元类的工作,但在这种情况下,我无法修改基类。
apple = {'color': 'red', 'shape': 'sphere'}
pear = {'color': 'yellow', 'shape': 'cone'}
melon = {'color': 'green', 'shape': 'prolate'}
class Fruit(object):
def __init__(self, color, shape):
self.color = color
self.shape = shape
class Apple(Fruit):
def __init__(self):
Fruit.__init__(self, **apple)
【问题讨论】:
-
如果它们只是初始值不同,那么它们是子类型的意义何在?为什么不只是
def apple(): return Fruit("red", "sphere")? -
想要使用子类的动机是什么?对于
Fruit的实例,这似乎是一个明显的用例,而不是子类。 -
内部表示不应该定义API;所以如果 OP 想要子类,可能是有原因的。
-
是有原因的,但我承认它们非常微不足道:如果类带有其对象的名称,则使用子类的代码会更清晰,我只是好奇这是否可能.
标签: python dynamic inner-classes