位置:首页 » Python3入门教程 » Python3 多态

Python3 多态 [编辑]

有时候,一个对象有多种类型或形式。假设有一个按钮,有许多不同的拉伸输出(圆形按钮,复选按钮,方形按钮,按钮图像),但它们确实共享相同的操作逻辑“点击”:onClick()。访问使用相同的方法。这种思想称为:多态。

多态是基于希腊词Poly (多)和态(形式)。我们将创建一个可以采用或使用许多形式的对象的结构。

多态性函数在Python中使用:

我们创建两个类:熊(Bear)和狗(Dog),它们各自有一个独特的声音。然后,我们创建两个实例,并用同样的方法调用它们看看它们各自的作用。

class Bear(object):
    def sound(self):
        print "Groarrr"
 
class Dog(object):
    def sound(self):
        print "Woof woof!"
 
def makeSound(animalType):
    animalType.sound()
 
 
bearObj = Bear()
dogObj = Dog()
 
makeSound(bearObj)
makeSound(dogObj)

结果输出:

Groarrr
Woof woof!

多态性与抽象类(最常用)

如果创建了一个编辑器,你事先可能不知道什么类型的文件,用户打开(PDF格式或word格式?)。 它不会有很大的访问,取代的是每个文档有20个类型?
for document in documents:
    print document.name + ': ' + document.show()

要做到这一点,我们创建了一个抽象类:document。这个类没有任何实现但定义结构(功能型),所有形式必须具备。如果我们定义函数 show(),那么这两个 PdfDocument 和 WordDocument 必须拥有 show()函数。全部代码如下:

输出结果:

Document1: Show pdf contents!
Document2: Show pdf contents!
Document3: Show word contents!

我们有一个抽象的接入点(文档),以多种类型的对象(pdf,word)遵循相同的结构。

另一个例子是有一个抽象类:Car 保持该结构方法:drive() 和 stop()。  我们定义两个对象:Sportscar 和 Truck,它们都是 Car 的一种形式。在伪代码是需要做的是:

class Car:
    def drive abstract, no implementation.
    def stop abstract, no implementation.
 
class Sportscar(Car):
    def drive: implementation of sportscar
    def stop: implementation of sportscar
 
class Truck(Car):
    def drive: implementation of truck
    def stop: implementation of truck

然后我们就可以访问任何类型的汽车,并调用其功能,而无需考虑形式是跑车(Sportscar )或卡车(Truck)。全部代码:

结果输出: