Python中的子类化

-3 投票
1 回答
2420 浏览
提问于 2025-04-15 12:22

可以动态地创建子类吗?我知道有____bases____这个东西,但我不想影响到这个类的所有实例。我想让对象cf变成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]

1 个回答

2

我不太确定你想要的具体用途是什么,但动态创建子类是可能的。你可以使用 type 对象,根据类名、基类的元组和方法/类属性的字典来动态构建一个类,比如:

>>> MySub = type("MySub", (DrvCrystalfontz, some_other_class), 
         {'some_extra method' : lamba self: do_something() })

现在,MySub 是 DrvCrystalfontzsome_other_class 的子类,继承了它们的方法,并添加了一个新方法("some_extra_method")。

撰写回答