""" Module containing a superclass Animal, with subclasses Bird, Parrot, and Penguin. Author: Anne Bracy (awb93) and Lillian Lee (ljl2) Date: April 16, 2018 """ class Animal(): """ An instance is a single animal with a name and an id number. """ # Class Attribute NUM_ANIMALS = 0 CAN_FLY = False CAN_SPEAK = False # BUILT-IN METHODS def __init__(self, name="NoName"): """ Creates a new Animal with a unique tag number. name: name of animal [str] """ # Instance attributes assert type(name) == str self.name = name self.tag_no = Animal.NUM_ANIMALS Animal.NUM_ANIMALS = Animal.NUM_ANIMALS + 1 def __str__(self): return type(self).__name__+": tag="+str(self.tag_no)+", NAME="+self.name+", FLY="+str(self.CAN_FLY)+", SPEAK="+str(self.CAN_SPEAK) def set_name(self, name): assert type(name) == str self.name = name class Bird(Animal): """ An instance is a bird. """ CAN_FLY = True class Parrot(Bird): """ An instance is a parrot. """ CAN_SPEAK = True # override the default class Penguin(Bird): """ An instance is a penguin. """ CAN_FLY = False # override the default