多态及多态性
啥是多态?
指的是同一类/种事物的不同形态(其实就是继承关系的表现)
多态只是一种格式形态,它的主要体现是多态性,理解多态性的含义,就明白了多态。
把多态比喻为人的顽固,多态性就相当于人的顽固性。
那多态性在类中的表现形式是怎样的呢?
class Animal():
def run(self):
print('run fast')
class mouse(Animal):
def sound(self):
print('5555')
obj=mouse() #你看,这里是在mouse类中进行了实例化,但下面的obj调用的run()在mouse类中并不存在
#我们自然而然就会想到mouse继承了Animal,所以obj会跑到Animal类中去找run()这个函数
#为什么程序会通过.run()自己自动跑到父类里面去找,这就是多态提供的。
obj.run()
多态性:在多态的背景下,可以在不用考虑对象具体类型(也就是不管是子类还是父类中存在这种方法)的前提下而直接使用对象
多态性的精髓:统一(统一方法。继承关系下,子类方便调用父类中的方法)
当然,导入abc模块,能够让子类强制执行父类的功能(也就是子类自己有该方法,但只要父类中也有,子类就必须用父类的。有点不讲道理,所以用的比较少)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
import abc #abstract class class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod def eat(self): pass @abc.abstractmethod def drink(self): pass @abc.abstractmethod def run(self): pass @abc.abstractmethod def bark(self): pass # obj=Animal() # 抽象基类本身不能被实例化 class Cat(Animal): def eat(self): print('cat eat') def drink(self): print('cat drink') def run(self): print('cat run') def bark(self): print('喵喵喵') c=Cat()
扩展(Python统一思想----一切皆对象,Linux统一思想----一切皆文件)
鸭子类型
python是比较崇尚鸭子类型的,目的也是也是和多态一样,为了统一。只不过鸭子类型统一代码的格式。
例子一(这是非常经典的一个例子):
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
class Duck(): def walk(self): print('I walk like a duck') def swim(self): print('i swim like a duck') class Person(): def walk(self): print('this one walk like a duck') def swim(self): print('this man swim like a duck')
例子二:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
class Disk: def read(self): print('Disk read') def write(self): print('Disk write') class Memory: def read(self): print('Mem read') def write(self): print('Mem write') class Cpu: def read(self): print('Cpu read') def write(self): print('Cpu write') obj1=Disk() obj2=Memory() obj3=Cpu() obj1.read() obj2.read() obj3.read()