是否可以动态子类化?我知道有____bases____但是我不想影响课程的所有实例。我想将对象cf和polymorph变成DrvCrystalfontz类的混合。进一步进入层次结构是gobject的子类,需要在此级别可用于连接信号,并且下面的解决方案是不够的。
class DrvCrystalfontz:
def __init__(self, model, visitor, obj=None, config=None):
if model not in Models.keys():
error("Unknown Crystalfontz model %s" % model)
return
self.model = Models[model]
if self.model.protocol == 1:
cf = Protocol1(self, visitor, obj, config)
elif self.model.protocol == 2:
cf = Protocol2(self, visitor, obj, config)
elif self.model.protocol == 3:
cf = Protocol3(self, visitor, obj, config)
for key in cf.__dict__.keys():
self.__dict__[key] = cf.__dict__[key]
答案 0 :(得分:2)
我不确定我是否清楚你想要的用途,但可以动态地进行子类化。您可以使用type
对象动态构造一个给定名称,基类元组和方法/类属性字典的类,例如:
>>> MySub = type("MySub", (DrvCrystalfontz, some_other_class),
{'some_extra method' : lamba self: do_something() })
MySub现在是DrvCrystalfontz
和some_other_class
的子类,继承了他们的方法,并添加了一个新方法(“some_extra_method
”)。