class Loan(object): def __init__(self, value): self.value = value class Movie(object): def __init__(self, price): self.price = price class Milk(object): def __init__(self, cost): self.cost = cost def calculate(p1, p2): total = 0 for product in [p1, p2]: for attr in ['cost', 'price', 'value']: if hasattr(product, attr): total += getattr(product, attr) return total
Price, cost and value
This is a simple assignment to demonstrate the power of Duck Typing. There are three classes already implemented (
Milk) but each one of them has a different attribute to represent "value".
Your job is to implement the highly dynamic
calculate function that takes two objects, that can be of any type (
Milk) and returns the total of the sum of their attributes. The key is to never check for types and to have a dynamic function with as few hardcoded names as possible.
Once you're done, check the solution and compare!
test calculate - Run Test
def test_calculate(): obj1 = Loan(10) obj2 = Movie(5) obj3 = Milk(1) assert calculate(obj1, obj2) == 15 assert calculate(obj1, obj3) == 11 assert calculate(obj2, obj3) == 6 assert calculate(obj3, obj3) == 2