A programming style which does not look at an object’s type to determine if it has the right interface; instead, the method or attribute is simply called or used (“If it looks like a duck and quacks like a duck, it must be a duck.”).
for employee in employees:
print(employee)
print(f'{employee.earnings():,.2f}\n')
employees
contains only objects that:print
(that is, they have a string representation) earnings
method which can be called with no argumentsobject
directly or indirectly, so they all inherit the default methods for obtaining string representations that print can displayearnings
method that can be called with no arguments, we can include objects of that class in the list employees
, even if the object’s class does not have an “is a” relationship with class CommissionEmployee
WellPaidDuck
:class WellPaidDuck:
def __repr__(self):
return 'I am a well-paid duck'
def earnings(self):
return Decimal('1_000_000.00')
from decimal import Decimal
from commissionemployee import CommissionEmployee
from salariedcommissionemployee import SalariedCommissionEmployee
c = CommissionEmployee('Sue', 'Jones', '333-33-3333',
Decimal('10000.00'), Decimal('0.06'))
s = SalariedCommissionEmployee('Bob', 'Lewis', '444-44-4444',
Decimal('5000.00'), Decimal('0.04'), Decimal('300.00'))
d = WellPaidDuck()
employees = [c, s, d]
for employee in employees:
print(employee)
print(f'{employee.earnings():,.2f}\n')
©1992–2020 by Pearson Education, Inc. All Rights Reserved. This content is based on Chapter 5 of the book Intro to Python for Computer Science and Data Science: Learning to Program with AI, Big Data and the Cloud.
DISCLAIMER: The authors and publisher of this book have used their best efforts in preparing the book. These efforts include the development, research, and testing of the theories and programs to determine their effectiveness. The authors and publisher make no warranty of any kind, expressed or implied, with regard to these programs or to the documentation contained in these books. The authors and publisher shall not be liable in any event for incidental or consequential damages in connection with, or arising out of, the furnishing, performance, or use of these programs.