#!/opt/local/bin/python # https://twitter.com/mengwong/status/1271434036976603136 from abc import ABC, abstractmethod class Person: def __init__(self, children=[]): self.children = children class TaxCredit(ABC): @abstractmethod def rate(self, person): pass class TaxCreditB: def rate(self, person): return 100 class TaxCreditA(TaxCreditB): def rate(self, person): return super().rate(person) / 2 if len(person.children) == 2 else super().rate(person) alice = Person() bob = Person() carol = Person(children = [alice, bob]) taxcB = TaxCreditB() print ("tax credit B: alice:", taxcB.rate(alice)) print ("tax credit B: bob:", taxcB.rate(bob)) print ("tax credit B: carol:", taxcB.rate(carol)) taxcA = TaxCreditA() print ("tax credit A: alice:", taxcA.rate(alice)) print ("tax credit A: bob:", taxcA.rate(bob)) print ("tax credit A: carol:", taxcA.rate(carol)) # 20200612-21:47:23 mengwong@venice4:~/tmp/python/taxc% python taxc.py # tax credit B: alice: 100 # tax credit B: bob: 100 # tax credit B: carol: 100 # tax credit A: alice: 100 # tax credit A: bob: 100 # tax credit A: carol: 50.0