Delegates: Difference between revisions

Content added Content deleted
(→‎{{header|Python}}: python colorization)
Line 297: Line 297:


=={{header|Python}}==
=={{header|Python}}==
<python>class Delegator:
<pre>
def __init__(self):
class Delegator:
def __init__(self):
self.delegate = None
self.delegate = None
def operation(self):
def operation(self):
if hasattr(self.delegate, 'thing'):
if hasattr(self.delegate, 'thing'):
return self.delegate.thing()
return 'default implementation'
return self.delegate.thing()
return 'default implementation'


class Delegate:
class Delegate:
def thing(self):
def thing(self):
return 'delegate implementation'
return 'delegate implementation'


if __name__ == '__main__':
if __name__ == '__main__':


# No delegate
# No delegate
a = Delegator()
a = Delegator()
assert a.operation() == 'default implementation'
assert a.operation() == 'default implementation'


# With a delegate that does not implement "thing"
# With a delegate that does not implement "thing"
a.delegate = 'A delegate may be any object'
a.delegate = 'A delegate may be any object'
assert a.operation() == 'default implementation'
assert a.operation() == 'default implementation'


# With delegate that implements "thing"
# With delegate that implements "thing"
a.delegate = Delegate()
a.delegate = Delegate()
assert a.operation() == 'delegate implementation'
assert a.operation() == 'delegate implementation'</python>
</pre>