문제

서브 클래스가 동적으로 가능합니까? ____ -Bases____가 있다는 것을 알고 있지만 수업의 모든 인스턴스에 영향을 미치고 싶지는 않습니다. 나는 객체 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]
도움이 되었습니까?

해결책

여기서 원하는 용도가 명확하지 않지만 서브 클래스를 동적으로 할 수 있습니다. 당신은 사용할 수 있습니다 type 개체 이름, 기본 클래스의 튜플 및 메소드 / 클래스 속성의 덕트가 주어진 클래스를 동적으로 구성하려면 : 예를 들어 :

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

MySub는 이제 서브 클래스입니다 DrvCrystalfontz 그리고some_other_class, 그들의 방법을 상속하고 새로운 방법을 추가합니다 ( "some_extra_method").

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top