多态及多态性和鸭子类型
多态
什么是多态
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。指的是同一类/种事物的不同形态(其实就是继承关系的表现)
为何要用多态
多态性:在多态的背景下,可以在不用考虑对象具体类型的前提下而直接使用对象
多态性的精髓:统一
这就好比开奥迪车,宝马车和奇瑞qq,开的都是车,学开车不是学开某一辆车。
父类定义了,以后子类需要使用父类的功能,直接使用.语法就行(写个例子)
class Animal():
def sound(self):
print('1111')
def run(self):
print('run fast')
class mouse(Animal):
def sound(self):
print('5555')
obj=mouse()
obj.run()
原理还是子类找不到就到父类中去找
导入abc模块,能够让子类强制执行父类的功能
Import abc
Class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod (强制子类有speak这个功能)
Def speak(self):
Pass
父类是用来建立规范的,不能用来实例化,更无须实现内部方法:Animal()
import abc
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def sound(self):
print('1111')
def run(self):
print('run fast')
class mouse(Animal):
def sound(self):
print('5555')
res=mouse()
print(res.sound())
扩展(Linux有一个统一思想----一切皆文件)
Python崇尚鸭子类型
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')
例子二:
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()
这只是一种格式规范,用来统一代码的格式
