当前位置: 首页 > news >正文

面向对象——多态

概念

同一个方法名,在不同对象上调用时,能呈现不同的行为。

标准多态

条件:

  • 继承
  • 方法重写
  • 类型限制
class Animal: def speak(self): print("动物正在发出叫声!") #继承 class Dog(Animal): def speak(self): print("汪汪汪!") class Cat(Animal): def speak(self): print("喵喵喵!") class Pig: def speak(self): print("哼哼哼!") def make_sound(animal:Animal): # 类型限制 # 多态的表现 animal.speak() make_sound(Animal())# 动物正在发出叫声! make_sound(Dog())# 汪汪汪! make_sound(Cat())# 喵喵喵! make_sound(Pig())# 哼哼哼! 在其他语言中会报错,在python中不会,十分不推荐

鸭子多态

核心理念:如果一个东西看起来像鸭子,叫起来也想鸭子,那它就是鸭子。

鸭子类型是一种编程风格,它不检查对象的类型,只关注对象能否“做某件事”(是否有对应的方法)。

#鸭子多态 class Dog: def speak(self): print("汪汪汪!") class Cat: def speak(self): print("喵喵喵!") class Pig: def speak(self): print("哼哼哼!") class Computer: def speak(self): print("滋滋滋!") # 无类型限制,只要有speak方法即可 def make_sound(animal): animal.speak() # 成功调用 make_sound(Dog())#汪汪汪! make_sound(Cat())#喵喵喵! make_sound(Pig())#哼哼哼! make_sound(Computer())#滋滋滋!

抽象类

定义:【抽象类】是一种不能直接实例化的类,它通常作为“规范”,让子类去继承,并必须实现其中定义的【抽象方法】。

定义抽象类需要引入abc包。【from abc import ABC, abstractmethod】

被@abstractmethod修饰的是抽象方法,继承ABC的类是抽象类。

验证:抽象类无法实例化。

如果抽象类没有抽象方法,可以实例化对象。不推荐,因为没有抽象方法,就不需要定义抽象类了。

验证:继承抽象类的子类必须实现抽象类的所有抽象方法。

from abc import ABC, abstractmethod #MustRun类一旦继承了ABC类,那么MustRun类就是抽象类了 class MustRun(ABC): #定义抽象方法,不需要实现 @abstractmethod def run(self): pass #抽象类也可以定义正常方法 def speak(self): print(f"{self.name}正在说话!") class Person(MustRun): def __init__(self, name, age): self.name = name self.age = age def run(self): print(f"{self.name}正在努力奔跑!") p1 = Person("张三", 18) p1.run() #张三正在努力奔跑! p1.speak()#张三正在说话!
http://www.jsqmd.com/news/1098856/

相关文章:

  • Focus架构:视觉语言模型的高效加速方案
  • 群辉Nas部署GitServer随笔
  • 别再被Python列表拷贝坑了!浅拷贝深拷贝,一个不注意就让你代码崩盘
  • 如何快速查找 *Bash* 命令的*类型*?
  • File和IO
  • 与你的 Elasticsearch 数据对话:使用 Google ADK 和 MCP 构建一个实时语音 agent ,分为 3 个组件
  • 5分钟快速上手:RedisDesktopManager-Windows终极可视化数据库管理工具完整指南
  • 告别串口乱码!STM32F401RCT6用Arduino框架点灯+串口打印保姆级教程
  • C#工业视觉实战:集成工业相机与YOLOv8实现缺陷检测系统
  • 探索兴趣爱好的内涵
  • 廖雪峰Python2教程PDF!20行代码秒杀C语言1000行,速度慢?谁在乎
  • 别再让激光器‘发烧’了!手把手教你用运放搭建高精度恒流源(附LTspice仿真文件)
  • 如何生成字母或数字的*序列*?
  • Dify平台大模型接入实战:从云端API到本地部署全流程指南
  • Postman便携版终极指南:Windows用户的免安装API开发解决方案
  • 别再只会用三极管了!用JFET搭个恒流源给LED调光,实测效果稳如老狗
  • 电脑弹窗拦截工具绿色免费超好用
  • 48.可直接落地!IEC61131-3 ST 完整源码|PLC 物料分拣 + PID 调速 + Modbus 通信
  • 零基础入门MySQL数据分析:从SQL语法到电商实战项目
  • SH9递归对抗驱动的活系统:九层架构理论体系深度研究报告(世毫九实验室原创研究)
  • linux中TCP通信
  • Python之rickshaw包语法、参数和实际应用案例
  • 基于PANDAS的QAbstractTableModel实现高级TableView详细解析(八、在TableView实现冻结窗口)
  • Confluence高危漏洞CVE-2022-26134应急响应与安全加固实战指南
  • 把 Enterprise Services Repository 配成一座稳定的集成设计中枢
  • 洛谷 P2024:[NOI2001] 食物链 ← 扩展域并查集
  • SpringBoot 底层原理完整教程(上篇・配置文件与配置优先级)
  • Anthropic揭秘Claude隔离内幕、加州政府半价用上AI、主权AI来了:今天6件大事
  • 35款自动脱壳工具合集:逆向工程中的“开罐器”与“手术刀”
  • 01 静态分析(Static Analysis)