Python3类的继承与多态学习笔记

继承:

首先定义一个类,叫Fruit

class Fruit(object):
    def label(self):
        print('Fruit is delicious...')

 

当我们进一步定义Apple,Orange,Banana等类的时候就可以从Fruit这个基类(Base Class)处继承这个label方法,

class Apple(Fruit):
    pass
class Orange(Fruit):
    pass
class Banana(Fruit):
    pass
     
apple=Apple()
orange=Orange()
banana=Banana()
apple.label()
orange.label()
banana.label()

运行结果:

C:\Users\asus\AppData\Local\Programs\Python\Python37\python.exe C:/Users/asus/PycharmProjects/爬虫/zrx.py
Fruit is delicious...
Fruit is delicious...
Fruit is delicious...

Process finished with exit code 0

继承的好处在于子类(subclass)可以获得基类的所有功能,即函数,当然子类也可以重新定义来覆盖掉继承来的方法

class Apple(Fruit):
    def label(self):
        print("Apple is delicious...")
apple=Apple()
apple.label()

 运行结果:

C:\Users\asus\AppData\Local\Programs\Python\Python37\python.exe C:/Users/asus/PycharmProjects/爬虫/zrx.py
Apple is delicious...

Process finished with exit code 0

多态:

一种接口,多种实现,实现代码重用,接口重用;

编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。

peo=People()
dog=Dog()
pig=Pig()

#peo、dog、pig都是动物,只要是动物肯定有talk方法
#于是我们可以不用考虑它们三者的具体是什么类型,而直接使用
peo.talk()
dog.talk()
pig.talk()

#更进一步,我们可以定义一个统一的接口来使用
def func(obj):
    obj.talk()

在上面继承中,当我们定义一个class的时候,我们实际上就定义了一种数据类型,也可以说是把具体事物apple,orange,banana的共同点抽象出来为fruit,定义了"Fruit"这种数据类型;既然是根据共同点抽象出来的,肯定有共同的特点,比如所有水果douk都可以用好吃这个词来形容,所以可以定义一个label()函数

  1. apple,orange,banana等可以继承或覆盖Fruit的label()函数,通过这个接口函数可以调用不同水果的的label,这是从抽象的概念到不同的具体水果的"多态"表现,一个接口表现多种状态。
  2. 由于python动态语言,鸭子类型的特性,所以不一定要有继承的关系才可以实现多态,只要某对象包含需要被调用的函数,就可以传入这个对象作为接口函数的输入来实现多态。

你可能感兴趣的:(Python)