File: LP6E/Chapter28/person-composite.py
from person_10 import Person # Example 28-10's Person
class Manager:
def __init__(self, name, pay):
self.person = Person(name, 'mgr', pay) # Embed a Person object
def giveRaise(self, percent, bonus=.10):
self.person.giveRaise(percent + bonus) # Intercept and delegate
def __getattr__(self, attr):
return getattr(self.person, attr) # Delegate all other attrs
def __repr__(self):
return str(self.person) # Must overload again per ahead
if __name__ == '__main__':
pat = Manager('Pat Jones', 50000) # Embed a Person
pat.giveRaise(.10) # Run Manager.giveRaise
print(pat.lastName()) # Delegate to embedded
print(pat) # Run Manager.__repr__