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

python中的面向对象:继承、封装、多态

# 导入 ABC 是指的引入抽象父类(Abstract Base Class - 本质是抽象方法装饰器)
from abc import ABC, abstractmethodclass Food(object):# 构造方法def __init__(self, name):self.name = name# Food子类
class Bone(Food):def __init__(self):super().__init__('Bone')class Fish(Food):def __init__(self):super().__init__('Fish')class Worm(Food):def __init__(self):super().__init__('Worm')# Animal类,继承ABC就有了抽象方法的定义权
class Animal(ABC):def __init__(self, name):self.name = name# getter方法@propertydef name(self):if self.__name:return self.__nameelse:return 'no name'# __变量 就是私有属性@name.setterdef name(self, name):# 逻辑判断if isinstance(name, str):self.__name = name.title()# 否则返回空对象else:self.__name = None# 吃饭 - 父类中的eat是抽象行为@abstractmethod# 定义一个抽象方法,让子类去进行自行实现def eat(self, food: Food):...# 子类
class Cat(Animal):# 使用父类构造方法def __init__(self, name):super(Cat, self).__init__(name)# 重写抽象方法def eat(self, food: Food):print(f'{self.name} eats {food.name}')def walk(self):print(f'{self.name} walks quickly')class Dog(Animal):def __init__(self, name):super(Dog, self).__init__(name)def eat(self, food: Food):print(f'{self.name} eats {food.name}')def chase_tail(self):print(f'{self.name} chases tail')class Person(object):def __init__(self, name):self.name = namedef feed(self, anmial: Animal,food: Food):print(f'{self.name} feeds {anmial.name}')anmial.eat(food)print(f'{anmial.name}吃饱了,准备给 {self.name}, 表演一个')if isinstance(anmial, Dog):anmial.chase_tail()elif isinstance(anmial, Cat):anmial.walk()p1 = Person('John')cat = Cat('jery')
dog = Dog('tom')bone = Bone()
fish = Fish()p1.feed(dog, bone)
p1.feed(cat, fish)

执行结果如下
在这里插入图片描述

http://www.xdnf.cn/news/1014877.html

相关文章:

  • 中小企业数字化转型:如何选择靠谱的软件开发服务商?
  • 【知识图谱构建系列2】LLM4KGC项目安装运行
  • Profinet转Modbus网关:破解热处理炉协议壁垒的温控通讯密码
  • Python图片格式转换工具深度解析[附源码】
  • Blender 4.4.3三维动画建模和渲染软件Win/Mac双端资源下载
  • RDMA简介7之RoCE v2可靠传输
  • 包含11个整套APP移动端UI的psd适用于旅行聊天交友相关的社交应用程序
  • 机器学习中的数据准备关键技术
  • iOS性能调试完整流程实录:工具组合下的问题定位与修复实践(含keymob)
  • 云端求解热方程:源于傅里叶的洞察-AI云计算数值分析和代码验证
  • 前端处理后端对象类型时间格式通用方法封装,前端JS处理JSON 序列化后的格式 java.time 包中的日期时间类
  • TensorFlow 与 PyTorch区别
  • 新书速览|大模型核心技术与开发实践:基于Transformer、PyTorch及Hugging Face
  • 哈希表三种数据结构在leetcode中的使用情况分析
  • 【Linux】进程创建、终止、等待、替换
  • 精品可编辑PPT | 基于人工智能及大数据的综合智能交通管理平台AI大数据平替智慧交通
  • Text2SQL、Text2API基础
  • Windows安装Oracle19
  • Linux服务器如何诊断和解决网络问题
  • 应用探析|千眼狼高速摄像机、sCMOS相机、DIC测量、PIV测量在光学领域的应用
  • 04 - CoordAttention模块
  • 职业技能大赛视角下:高职院校课堂教学破局与提质之路
  • 位运算详解之与或非的巧妙运用
  • 【6-7-6.14学习周报】
  • 让 Deepseek 写电器电费计算器小程序
  • 朴朴超市小程序 sign-v2 分析
  • Docker Windows 配置国内镜像源方法
  • 堆排序详解:从理论到实践
  • Hadoop 002 — HDFS常用命令及SpringBoot整合操作
  • 微服务--消息队列mq