複代理是什麼意思
複代理(Delegation)是物件導向程式設計中的一個概念,它允許一個物件將它的一部分行為委託給另一個物件。在這種模式下,委託者(Delegator)將某些方法委託給代表者(Delegate)來執行,這樣委託者就不需要直接實作這些方法,而是透過代表者來完成。
在Python中,委託可以通過多種方式實現,例如繼承、組件和介面等。一個簡單的例子是使用Python的__getattr__魔法方法來實現委託。以下是一個簡單的例子:
class Delegator:
    def __init__(self, delegate):
        self.delegate = delegate
    def __getattr__(self, attr):
        if attr in self.__dict__:
            return self.__dict__[attr]
        return getattr(self.delegate, attr)
class RealImplementation:
    def method1(self):
        print("RealImplementation.method1")
    def method2(self):
        print("RealImplementation.method2")
class MyImplementation(Delegator):
    def method3(self):
        print("MyImplementation.method3")
my_implementation = MyImplementation(RealImplementation())
my_implementation.method1()  # 輸出: RealImplementation.method1
my_implementation.method2()  # 輸出: RealImplementation.method2
my_implementation.method3()  # 輸出: MyImplementation.method3在上面的例子中,Delegator類別定義了一個__getattr__方法,當直接訪問Delegator物件時,如果找不到屬性,它會嘗試在self.delegate中尋找並返回結果。MyImplementation繼承自Delegator,並將RealImplementation作為其delegate。當我們呼叫my_implementation.method1()時,實際上是在呼叫RealImplementation的method1方法。但是,MyImplementation可以定義自己的方法,例如method3,這樣當我們呼叫my_implementation.method3()時,我們實際上是在呼叫MyImplementation的method3方法。
這種模式可以用來實現靈活的設計,其中一個類別可以根據需要委託給不同的類別來執行特定的行為。