Frage

Ist es möglich, dynamisch zu Unterklasse? Ich weiß, dass es ____bases____ aber ich will nicht alle Instanzen der Klasse bewirken. Ich möchte das Objekt cf in eine mixin der DrvCrystalfontz Klasse Polymorph. Weitere in der Hierarchie ist eine Unterklasse von gobject, die für den Anschluss von Signalen auf dieser Ebene verfügbar sein muss und die Lösung unter nicht ausreichend ist.

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]
War es hilfreich?

Lösung

Ich bin nicht sicher, ich bin klar auf Ihrer gewünschte Verwendung hier, aber es ist möglich, dynamisch zu Unterklasse. Sie können das type-Objekt verwenden, dynamisch eine Klasse einen Name, Tupel von Basisklassen und dict von Methoden / Klassenattribute, zB gegeben zu konstruieren:

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

MySub ist jetzt eine Unterklasse von DrvCrystalfontz andsome_other_class, erbt ihre Methoden, und fügt eine neue ( "some_extra_method").

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top