Question

Est-il possible de sous-classer dynamiquement? Je sais qu'il y a ____bases____ mais je ne veux pas affecter toutes les instances de la classe. Je veux que l'objet cf soit polymorphe dans un mixin de la classe DrvCrystalfontz. Plus loin dans la hiérarchie se trouve une sous-classe de gobject qui doit être disponible à ce niveau pour connecter des signaux, et la solution ci-dessous ne suffit pas.

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]
Était-ce utile?

La solution

Je ne suis pas sûr de bien comprendre votre utilisation souhaitée ici, mais il est possible de sous-classer de manière dynamique. Vous pouvez utiliser l'objet type pour construire de manière dynamique une classe à partir d'un nom, d'un tuple de classes de base et d'un dictionnaire d'attributs de méthodes / de classe, par exemple:

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

MySub est maintenant une sous-classe de DrvCrystalfontz et some_other_class , hérite de leurs méthodes et en ajoute une nouvelle (" some_extra_method ") .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top