多态及多态性和鸭子类型
多态
什么是多态
指的是同一类/种事物的不同形态(其实就是继承关系的表现)
为何要用多态
多态性:在多态的背景下,可以在不用考虑对象具体类型的前提下而直接使用对象
多态性的精髓:统一
这就好比开奥迪车,宝马车和奇瑞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()
这只是一种格式规范,用来统一代码的格式
下一篇: Django 系列博客(一)
推荐阅读
-
给Asp.Net初学者的关于继承和多态性的例子
-
【2020Python修炼记】面向对象编程——多态性与鸭子类型
-
Python实现多态、协议和鸭子类型的代码详解
-
c++转码基础(1):各种编码类型及unicode和uft-8互转
-
多态及多态性和鸭子类型
-
理解和运用PHP中的多态性[译]
-
Python高级编程技巧(鸭子类型、抽象基类、type和isinstance、类属性和实例属性查找顺序、自省机制)
-
TensorFlow:四种类型数据的读取流程及API讲解和代码实现
-
Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍
-
动物类及动物的部分行为(体现封装,继承和多态)