Pergunta

É possível subclasse dinamicamente? Eu sei que há ____bases____ mas eu não quero para efetuar todas as instâncias da classe. Eu quero o objeto cf para polimorfo em um mixin da classe DrvCrystalfontz. Mais para a hierarquia é uma subclasse de gobject que tem de estar disponível a este nível para ligar os sinais, e a solução abaixo não é suficiente.

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]
Foi útil?

Solução

Eu não estou certo que eu estou claro sobre o seu uso desejado aqui, mas é possível a subclasse dinamicamente. Você pode usar o objeto type para construir dinamicamente uma classe dado um nome, tupla de classes base e dict de métodos / atributos de classe, por exemplo:

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

MySub agora é uma subclasse de andDrvCrystalfontz some_other_class, herda seus métodos, e acrescenta uma nova ( "some_extra_method").

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top