Подклассы в Python - PullRequest
       16

Подклассы в Python

0 голосов
/ 20 июня 2009

Можно ли динамически создавать подклассы? Я знаю, что есть _____ основы ____, но я не хочу воздействовать на все случаи в классе. Я хочу, чтобы объект 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 голосов
/ 20 июня 2009

Я не уверен, что у меня есть четкое представление о вашем желаемом использовании здесь, но можно динамически создавать подклассы. Вы можете использовать объект type для динамического конструирования класса по имени, кортежу базовых классов и диктату методов / атрибутов класса, например:

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

MySub теперь является подклассом DrvCrystalfontz и some_other_class, наследует их методы и добавляет новый ("some_extra_method").

...