26 lines
716 B
Python
26 lines
716 B
Python
class Delegator:
|
|
def __init__(self):
|
|
self.delegate = None
|
|
def operation(self):
|
|
if hasattr(self.delegate, 'thing') and callable(self.delegate.thing):
|
|
return self.delegate.thing()
|
|
return 'default implementation'
|
|
|
|
class Delegate:
|
|
def thing(self):
|
|
return 'delegate implementation'
|
|
|
|
if __name__ == '__main__':
|
|
|
|
# No delegate
|
|
a = Delegator()
|
|
assert a.operation() == 'default implementation'
|
|
|
|
# With a delegate that does not implement "thing"
|
|
a.delegate = 'A delegate may be any object'
|
|
assert a.operation() == 'default implementation'
|
|
|
|
# With delegate that implements "thing"
|
|
a.delegate = Delegate()
|
|
assert a.operation() == 'delegate implementation'
|