<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">class Animal():

    n_animals = 0
    CAN_SWIM = False
    CAN_FLY = False
    CAN_SPEAK = False

    def __init__(self, name, weight=50):
        assert type(name) == str
        self.name = name
        self.tag_no = Animal.n_animals
        self.weight = weight
        Animal.n_animals += 1

    def speak(self, words):
        if self.CAN_SPEAK:
             print(words)

    def eat(self):
        print("NOM NOM NOM")
        self.weight += 1

class Fish(Animal):
    CAN_SWIM = True   # override the Animal default

    def __init__(self, name, weight=3):
        super().__init__(name, weight)
    
    def eat(self):
        print(". . .")
        self.weight += 1

class Bird(Animal):

    CAN_FLY = True

    def __init__(self, name, weight=2):
        super().__init__(name, weight)

    def eat(self):
        print("Peck Peck Peck!")
        self.weight += 1
    
class Parrot(Bird):

    CAN_SPEAK = True  # override the Bird default

    def speak(self, words):
        super().speak(words)
        print("Now give me a cracker!")

class Penguin(Bird):
    
    CAN_FLY = False  # override the Bird default
    CAN_SWIM = True  # override the Animal default
    
    def __init__(self, name, weight=25):
        super().__init__(name, weight)
    
</pre></body></html>