多态 与 鸭子类型 duck duck duck
2024-10-15 22:16:27
# --> ''' 多态 与 鸭子类型 --> 什么是多态
对象的多种状态,父类对象的多种 (子类对象) 状态 --> 什么是鸭子类型:
长的像就是
1.规定有什么属性及什么方法的对象叫鸭子类型
2.能提供出规定的属性与方法的对象就是鸭子 函数内有.xxx .yyy方法
传入的对象也必须要有.xxx .yyy才能运行 ''' # -- ( 多态 ) ------------------------------------------------------------------------------------------- import abc
class People(metaclass=abc.ABCMeta):
def __init__(self,name):
self.name = name def eat(self):
print('eat')
@abc.abstractmethod
def speak(self):pass class Chinese(People):
def speak(self):
print('说中国话') class England(People):
def speak(self):
print('说英国话') if __name__ == '__main__': # def ask_someone(obj):
# 多态的体现:功能或是需求,需要父类的对象,可以传入父类对象或任意子类对象
# 一般都是规定需要父类对象,传入子类对象
# 有抽象方法的父类不能被实例化 (假设因为被实例化后,就可以调用自己的抽象方法,没有意义)
def ask_someone(obj):
print('让%s上台演讲'%obj.name) # 父类提供,子类之间继承
obj.speak()
# 父类提供,英国和中国speak内容不同,
# 调用abc模块装饰父类@abc.abstractmethod子类重写 ch = Chinese('王大锤') # ch实例化,用了Chinses类,用继承的父类People中的自定义name,传入'王大锤'
en = England('Tom') ask_someone(ch)
# 调用函数ask_someone(obj) 传入ch的实例化 Chinese('王大锤')
ask_someone(en) # England 类有.name .speak
# ask_someone 方法有.name .speak需求
# 即可直接传入 # -- ( 鸭子类型 ) ------------------------------------------------------------------------------------------- # 长的差不多的类,都具有一样的功能
最新文章
- Spring框架值注解
- INI文件的读取(C语言:GetPrivateProfileString/GetPrivateProfileInt)
- C# 路径
- HDOj 1010 DFS优化
- char *a 与char a[] 的区别
- Maven远程仓库
- 使用SpringMVC时,配置DispatcherServlet注意的url-pattern的问题
- DevOps之虚拟专用网络VPN
- Linux 学习笔记_12_Windows与Linux文件共享服务_1.1_--Samba(下)Samba经典应用案例
- web自动化测试(java)---测试过程中遇到的错误合集
- Sql 嵌套循环
- wampserver变橙色,apache 服务无法启动!问题解决小记(安装失败亦可参考)
- MongoDB查询结果存放入新的Collection
- WPF双向绑定
- JAVA 利用Dom4j实现英语六级词汇查询 含演示地址
- vue 关于deep watch / computed 监听不到 vuex state 对象变化的的问题
- Search for a Range leetcode java
- Java异常总结和Spring事务处理异常机制浅析
- poj2115 C Looooops
- Java经纬读坐标的距离计算