【python之路】【之前没搞明白】5面向对象(多态)
多态
有时一个对象会有多种表现形式,比如网站页面有个button按钮, 这个button的设计可以不一样(单选框、多选框、圆角的点击按钮、直角的点击按钮等),尽管长的不一样,但它们都有一个共同调用方式,就是onClick()方法。我们直要在页面上一点击就会触发这个方法。点完后有的按钮会变成选中状态、有的会提交表单、有的甚至会弹窗。这种多个对象共用同一个接口,又表现的形态不一样的现象,就叫做多态( Polymorphism )。
Polymorphism is based on the greek words Poly (many) and morphism (forms).
接下来我们通过代码来演示什么是多态。
通过统一函数接口实现多态
class Dog(object):def sound(self):
print("汪汪汪.....")
class Cat(object):
def sound(self):
print("喵喵喵.....")
def make_sound(animal_type):
"""统一调用接口"""
animal_type.sound() # 不管你传进来是什么动物,我都调用sound()方法
dogObj = Dog()catObj = Cat()
make_sound(dogObj)
make_sound(catObj)
通过抽象类实现多态(最常用)
假如你开发一个文本编辑器,支持多种文档类型, 在用户通过你的编辑器打开文件之前,你也不知道准备要打开的是什么类型的文件,可能是pdf,也可能是word.
假如你为每个文件类型都写一个类,每个类都通过show()方法来调用打开对应的文档,为了确保每个类都必须实现show()方法,你可以写一个抽象类。
class Document:
def __init__(self, name):self.name = name
def show(self):raise NotImplementedError("Subclass must implement abstract method")
# 设计架构时,添加这句话,继承父类的子类里面都需要重写这个方法,不然报错
class Pdf(Document):def show(self):#重写show()
return 'Show pdf contents!'
class Word(Document):def show(self):#重写show()
return 'Show word contents!'
documents = [Pdf('Document1'),Pdf('Document2'),
Word('Document3')]
for document in documents:
print(document.name + ': ' + document.show())
再来一个例子:
class Car:def __init__(self, name):
self.name = name
def drive(self):
raise NotImplementedError("Subclass must implement abstract method")
def stop(self):
raise NotImplementedError("Subclass must implement abstract method")
class SportsCar(Car):def drive(self):
return 'Sportscar driving!'
def stop(self):
return 'Sportscar braking!'
class Truck(Car):def drive(self):
return 'Truck driving slowly because heavily loaded.'
def stop(self):
return 'Truck braking!'
cars = [Truck('东风重卡'),Truck('三一重工'),
SportsCar('Tesla Roadster')]
for car in cars:
print(car.name + ': ' + car.drive())
以上是 【python之路】【之前没搞明白】5面向对象(多态) 的全部内容, 来源链接: utcz.com/z/387908.html