We now define the Customer
class described in class diagram below: an instance of this class will become the customer
attribute of the BankAccount
class.
Note that it was possible to instantiate a BankAccount
object by passing a string literal as customer
. This is a consequence of Python's dynamic typing: no check is automatically made that the object passed as an argument to the class constructor is of any particular type.
The following code defines a Customer
class and should be saved to a file called customer.py
:
from datetime import datetime
class Customer:
""" A class representing a bank customer. """
def __init__(self, name, address, date_of_birth):
self.name = name
self.address = address
self.date_of_birth = datetime.strptime(date_of_birth, '%Y-%m-%d')
self.password = '1234'
def get_age(self):
""" Calculates and returns the customer's age. """
today = datetime.today()
try:
birthday = self.date_of_birth.replace(year=today.year)
except ValueError:
# birthday is 29 Feb but today's year is not a leap year
birthday = self.date_of_birth.replace(year=today.year,
day=self.date_of_birth.day - 1)
if birthday > today:
return today.year - self.date_of_birth.year - 1
return today.year - self.date_of_birth.year
Then we can pass Customer
objects to our BankAccount
constructor:
>>> from bank_account import BankAccount
>>> from customer import Customer
>>>
>>> customer1 = Customer('Helen Smith', '76 The Warren, Blandings, Sussex',
'1976-02-29')
>>> account1 = BankAccount(customer1, 21457288, 1000)
>>> account1.customer.get_age()
39
>>> print(account1.customer.address)
76 The Warren, Blandings, Sussex