基类与衍生类有相同方法名称的实例,其实那就是本节将说明的多态的基本概念,但是在多态的概念中是不局限在必须有父子关系的类。程序实例ch12_17.py:这个程序有三个类,Animals类是基类,Dogs类是Animals类的衍生类,基于继承的特性所以两个类皆有which()和action()方法,另外设计了一个与上述无关的类Monkeys,这个类也有which()和action()方法,然后程序分别调用which()和action()方法,程序会由对象类别判断应该使用哪一个方法响应程序。
class Animals():
"""Animals类,这是基类"""
def __init__(self, animal_name):
self.name = animal_name # 记录动物名称
def which(self): # 返回动物名称
return 'My per ' + self.name.title()
def action(self): # 动物的行为
return 'sleeping'
class Dogs(Animals):
"""Dogs类别,这是Animal的衍生类"""
def __init__(self, dog_name): # 记录动物名称
super().__init__(dog_name.title())
def action(self): # 动物的行为
return 'running in the street'
class Monkeys():
"""猴子类别,这是其他类"""
def __init__(self, monkey_name): # 记录动物名称
self.name = 'My monkey' + monkey_name.title()
def which(self): # 返回动物名称
return self.name
def action(self): # 动物的行为
return 'running in the forest'
def doing(obj):
print(obj.which(), "is", obj.action())
# --------------------------------------------
my_cat = Animals('lucy') # Animals对象
doing(my_cat)
# -------------------------------------------
my_dog = Dogs('gimi') # Dogs对象
doing(my_dog)
# -------------------------------------------
my_monkey = Monkeys('taylor') # Monkeys对象
doing(my_monkey)