複代理是什麼意思
複代理(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方法。
這種模式可以用來實現靈活的設計,其中一個類別可以根據需要委託給不同的類別來執行特定的行為。