python基础-面向对象编程之多态
面向对象编程之多态以及继承、抽象类和鸭子类型三种表现形式
多态
定义:同一种类型的事物,不同的形态
作用: 多态也称之为“多态性”。用于在不知道对象具体类型的情况下,统一对象调用方法的规范(比如说名字)
表现形式:有3种,分别是继承、抽象类和鸭子类型
继承:耦合度高,程序的可扩展性低
实现
- 父类:定义一套统一的规范(比如:方法名统一)
- 子类:遵循父类的统一规范(比如:子类遵循父类方法名称的统一)
抽象类:耦合度极高,程序的可扩展性极低
由于在python中,继承并不会强制子类必须要遵循父类的规范,因此出现了抽象类
定义:在python内置的abc模块中,有一个抽象类ABCMeta
作用:限制子类必须遵循父类的编写模块
实现
- 父类需要继承ABC模块中的ABCMeta,语法是
metaclass = ABCMeta - 在父类的方法中,需要使用装饰器
abc.abstractmethod
注意:
1.
abc.abstractclassmethod已经被停用了,在后期代码编写时,不要使用。abc.abstractmethod是目前在用的装饰器2.在抽象类的表现形式下,父类中被abc.abstractmethod装饰的方法,子类必须按照父类的方法编写规范,缺一不可
3.在python中不推荐使用抽象类
"""
抽象类的实现
1. 导入模块 abc
2. 父类继承abc.ABCMeta类,语法:metaclass = abc.ABCMeta
3. 给父类的方法,装饰上 abc.abstractmethod
注意:abc.abstractclassmethod 已被停用,带删除线;
现使用abc.abstractmethod
"""
import abc # 父类Animal 继承abc.ABCMeta 类
class Animal(metaclass=abc.ABCMeta):
# @abc.abstractclassmethod 已停用
# 装饰上abc.abstractmethod
@abc.abstractmethod
def speak(self): # 该方法被abstractmethod装饰,子类必须一致
print("from Animal")
pass def run(self): # 该方法没有被装饰,子类可不保持一致
pass class Dog(Animal):
def speak(self):
print("汪汪汪……")
def pao(self):
print("旺财狂奔起来!!!!") dog = Dog()
dog.speak() # 输出结果:汪汪汪……
dog.pao() # 输出结果:旺财狂奔起来!!!!
如果不按照父类的方法命名规范,则会报错
# 父类Animal参照python基础-面向对象编程之多态的更多相关文章
- python基础-面向对象编程之继承
面向对象编程之继承 继承的定义:是一种新建类的方式,新建的类称之为子类或派生类,被继承的父类称之为基类或超类 继承的作用:子类会""遗传"父类的属性,从而解决代码重用问题 ...
- python基础-面向对象编程之封装、访问限制机制和property
面向对象编程之封装 封装 定义:将属性和方法一股脑的封装到对象中,使对象可通过"对象."的方式获取或存储数据. 作用:让对象有了"."的机制,存取数据更加方便 ...
- python基础-面向对象编程之反射
面向对象编程之反射 反射 定义:通过字符串对对象的属性和方法进行操作. 反射有4个方法,都是python内置的,分别是: hasattr(obj,name:str) 通过"字符串" ...
- python基础-面向对象编程之组合
面向对象编程之组合 定义:一个对象中拥有另一个或其他多个对象的属性和方法. 作用:减少代码的冗余,降低耦合度 关于耦合度的说明 耦合:通俗地讲,就是相互作用,相互影响的意思 耦合度越高,程序的可扩展性 ...
- python基础——继承和多态
python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...
- Python基础教程之List对象 转
Python基础教程之List对象 时间:2014-01-19 来源:服务器之家 投稿:root 1.PyListObject对象typedef struct { PyObjec ...
- Python基础教程之udp和tcp协议介绍
Python基础教程之udp和tcp协议介绍 UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但 ...
- python基础之类的多态与多态性
原文链接:https://www.cnblogs.com/luchuangao/p/6739557.html 很多人喜欢将多态与多态性二者混为一谈,然后百思不得其解,其实只要分开看,就会很明朗. 一 ...
- python基础--面向对象之多态
# 多态是指一类事物有多种行态, # 例如:动物有多种形态:人,狗,猫 # 他们有一些共同的特征:吃,喝,拉,撒 # 多态性是指在不考虑实例类型的情况下使用实例 # 对同一事物不同的类,对象有不同的响 ...
随机推荐
- HTML基础五-starrysky页面动起来
Starrysky前端框架 链接:https://pan.baidu.com/s/1P8mPrHZjyRtzw1NWnAx-9w 提取码:cjl5 接口文档:https://www.showdoc.c ...
- Linux学习笔记-第4天- linux命令有很多,不要求全会,常用的一定要能够熟练使用
linux命令就像单词,有很多.词汇量固然越大越好,但是常用基础命令一定要做到熟练应用. 同时学习不是死记硬背,排错能力同等重要,要理解其命令背后的运行机制,这样才能在翻车时 及时救场.
- ESP8266 LUA脚本语言开发: 准备工作-LUA开发说明
前言 开发Lua需要使用这个软件 注:该软件需要按照JDK 即 JAVA虚拟机,如果没有安装过JDK,请先看JDK安装教程安装JDK USB线连接开发板接入电脑 选择自己的串口号 波特率115200 ...
- [RN] React Native : Failed to execute aapt
这是我在开发 React Native 本地 Android Studio 3.1.4 时 构建 release 版本失败,而开发环境正常 之前用 Android Studio 2.* 未出现此问题 ...
- cookie清除及其他操作
JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的. 而cookie是运行在客户端的,所以可以用JS来设置cookie. 一:设置co ...
- luoguP4551最长异或路径
P4551最长异或路径 链接 luogu 思路 从\(1\)开始\(dfs\)求出\(xor\)路径.然后根据性质\(x\)到\(y\)的\(xor\)路径就是\(xo[x]^xo[y]\) 代码 # ...
- windwos文件句柄数限制
1.修改注册表,位置如下: HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Windows 2.设置 1.GDIProc ...
- WEB前端开发职业学习路线初级完整版
作者 | Jeskson 来源 | 达达前端小酒馆 下面小编专门为广大web前端开发职业者汇总了学习路线初级完整版,其实web前端开发工程师可算是高福利,高薪水的职业了,所以现在学习web前端开发的技 ...
- [LeetCode] 374. Guess Number Higher or Lower 猜数字大小
We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...
- c++ 使用 vcpkg
1. 打开下载地址:https://github.com/Microsoft/vcpkg 2. 直接下载到本地某个盘 3. 配置环境变量: 4. 打开下载到本地的vcpkg有可能叫vcpkg-mast ...
- 父类需要继承ABC模块中的ABCMeta,语法是