【问题标题】:Subclassing in PythonPython中的子类化
【发布时间】:2009-06-19 20:11:03
【问题描述】:

是否可以动态子类化?我知道有____bases____,但我不想影响该类的所有实例。我希望对象 cf 变形为 DrvCrystalfontz 类的 mixin。进一步进入层次结构的是 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]

【问题讨论】:

  • 您能否再解释一下您的用例,以及为什么上述解决方案不起作用?
  • 请恢复原问题,这对没看过的人来说完全没用。如果您对自己的问题有答案,请创建一个answer

标签: python subclassing


【解决方案1】:

我不确定我是否清楚你想要的用途,但可以动态子类化。您可以使用type 对象动态构造一个给定名称、基类元组和方法/类属性字典的类,例如:

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

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

【讨论】:

  • 我当然不知道这种类型的使用。谢谢指点。
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
相关资源
最近更新 更多