python基础-面向对象编程之多态
2024-09-05 09:37:19
面向对象编程之多态以及继承、抽象类和鸭子类型三种表现形式
多态
定义:同一种类型的事物,不同的形态
作用: 多态也称之为“多态性”。用于在不知道对象具体类型的情况下,统一对象调用方法的规范(比如说名字)
表现形式:有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参照
最新文章
- myBatis foreach详解【转】
- meta标签用法总结
- fastcgi 性能初配 504 gateway time-out
- Android 6.0权限
- Tex使用
- 关于python多线程编程中join()和setDaemon()的一点儿探究
- 《algorithm puzzles》——概述
- JavaScript 中的面向对象的初步认识
- 解决Xcode 7编译错误:does not contain bitcode
- GitLab服务器IP地址设置
- 2018-2019-2 20165337《网络攻防技术》Exp5 MSF基础应用
- MSComm控件与Win32 API操作串口有何区别?
- caffe源码阅读(1)_整体框架和简介(摘录)
- Linux 程序设计1:深入浅出 Linux 共享内存
- springboot 项目中获取默认注入的序列化对象 ObjectMapper
- 浅谈 OpenResty
- python快速开发Web之Django
- MyEclipse常用设置和快捷键
- VMware vCenter Server安装
- C# 生成自签名CA证书
热门文章
- OpenStack Nova
- streamsets 官方默认镜像中文支持问题
- Codeforces Round #549 (Div. 2) D 数学
- [LeetCode] 902. Numbers At Most N Given Digit Set 最大为 N 的数字组合
- [LeetCode] 208. Implement Trie (Prefix Tree) 实现字典树(前缀树)
- 爬虫解析库:XPath
- loj 2135 「ZJOI2015」幻想乡战略游戏 - 动态点分治
- spring cloud gateway网关启动报错:No qualifying bean of type 'org.springframework.web.reactive.DispatcherHandler'
- SVN全局文件过滤规则设置
- sql 自动增加排序 并且初始值是000001
- 父类需要继承ABC模块中的ABCMeta,语法是