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

Python面向对象:封装、继承、多态

作为Python面向对象编程OOP的三大核心特性封装、继承、多态是从编程新手进阶到熟练开发者的必备知识。它们不是晦涩的理论而是能让代码更简洁、复用性更强、扩展性更好的实用工具。一、什么是面向对象在讲三大特性前先明确两个基础概念类Class是模板比如「人类」定义了属性和行为的规则对象Object是实例比如「张三」「李四」是类的具体实现。也就是说类是抽象而对象是一个看得见摸得着的实体面向对象的核心思想把数据和操作数据的方法绑定在一起用对象管理代码而不是零散的函数和变量。而封装、继承、多态就是实现这一思想的三大支柱。二、特性一封装 —— 保护数据只留必要接口1. 什么是封装把类的核心数据和方法藏起来只对外暴露安全的调用接口。就像我们用手机只需要按屏幕、点按钮不需要知道内部芯片、电路的工作原理——内部细节被「封装」了既保护了数据安全又简化了使用。2. Python封装的实现Python没有严格的private关键字用下划线约定实现封装单下划线_属性/方法保护成员约定不建议外部直接访问双下划线__属性/方法私有成员外部无法直接访问强制封装。3. 代码示例classPerson:def__init__(self,name,age):self.namename# 公有属性外部可直接访问self.__ageage# 私有属性外部无法直接访问封装核心# 对外暴露的方法安全获取私有属性defget_age(self):returnself.__age# 对外暴露的方法安全修改私有属性可加校验defset_age(self,new_age):if0new_age150:# 封装校验逻辑防止非法数据self.__agenew_ageelse:print(年龄不合法)# 创建对象pPerson(张三,20)# 1. 公有属性可直接访问print(p.name)# 输出张三# 2. 私有属性无法直接访问会报错# print(p.__age) # 报错AttributeError# 3. 通过暴露的方法访问/修改私有属性print(p.get_age())# 输出20p.set_age(25)# 合法修改print(p.get_age())# 输出25p.set_age(200)# 输出年龄不合法封装的优点保护数据安全防止外部随意修改核心数据简化使用外部只需调用接口无需关心内部逻辑便于维护内部逻辑修改不影响外部调用。三、继承1.单继承.py# 单继承子类只继承一个父类classFather:def__init__(self):self.money1000defdrive(self):print(爸爸会开车)# Son 类 继承 Father类classSon(Father):# 子类可以拥有自己的属性和方法defstudy(self):print(儿子会学习)# 创建子类对象sSon()# 子类对象直接使用父类的属性和方法print(s.money)s.drive()s.study()2.重写.py# 方法重写子类定义和父类同名的方法覆盖父类实现classFather:defdrive(self):print(爸爸开燃油车)# 子类重写父类方法classSon(Father):defdrive(self):print(儿子开电动车)sSon()# 调用的是子类重写后的方法s.drive()3.super()调用父类的同名方法# super()在子类中调用父类的同名方法classFather:defdrive(self):print(爸爸开燃油车)classSon(Father):defdrive(self):# 调用父类的drive方法super().drive()print(儿子开电动车)sSon()s.drive()4.多继承.py# 多继承一个子类继承多个父类classFather:defdrive(self):print(爸爸会开车)classMother:defcook(self):print(妈妈会做饭)# 子类同时继承两个父类classSon(Father,Mother):passsSon()s.drive()s.cook()5.练习方法查找顺序# 方法查找顺序 MRO从当前类 - 左父类 - 右父类 - objectclassA:deffunc(self):print(A类方法)classB(A):deffunc(self):print(B类方法)classC(B):pass# 查看类的继承顺序print(C.__mro__)cC()c.func()6演示python的伪多态# Python 伪多态鸭子类型不强制继承只要有同名方法就可以调用classDog:defspeak(self):print(汪汪汪)classCat:defspeak(self):print(喵喵喵)# 统一调用接口不需要继承同一个父类defmake_speak(animal):animal.speak()make_speak(Dog())make_speak(Cat())7.isinstance# isinstance判断对象是否是某个类或子类的实例classFather:passclassSon(Father):passsSon()fFather()print(isinstance(s,Son))# Trueprint(isinstance(s,Father))# True子类对象属于父类类型print(isinstance(f,Son))# False8.成员属性和类属性# 成员属性实例属性每个对象独立拥有# 类属性所有对象共享属于类classPerson:# 类属性species人类def__init__(self,name):# 成员实例属性self.namename# 访问类属性print(Person.species)p1Person(张三)p2Person(李四)# 实例访问类属性print(p1.species)print(p2.name)四、多态 —— 同一行为不同表现1. 什么是多态一句话总结不同子类对象调用同一个父类方法表现出不同的行为。前提继承 方法重写。就像「动物」都会叫但「狗」是汪汪叫「猫」是喵喵叫——同一个「叫」的行为不同子类有不同实现。2. 代码示例# 父类动物classAnimal:defspeak(self):pass# 父类定义方法模板不具体实现# 子类1狗classDog(Animal):# 重写speak方法defspeak(self):print(汪汪汪)# 子类2猫classCat(Animal):# 重写speak方法defspeak(self):print(喵喵喵)# 统一调用函数接收任意Animal子类对象defanimal_speak(animal):animal.speak()# 创建不同子类对象dogDog()catCat()# 同一方法不同表现多态核心animal_speak(dog)# 输出汪汪汪animal_speak(cat)# 输出喵喵喵多态的优点灵活通用统一调用接口无需区分具体子类易于扩展新增子类时无需修改原有调用代码降低耦合代码依赖父类不依赖具体子类。五、三大特性核心总结特性核心思想作用封装藏细节露接口保护数据简化使用继承子类复用父类减少重复代码层级清晰多态同一行为不同表现代码灵活易于扩展用封装保护数据用继承复用代码用多态实现灵活扩展——这就是Python面向对象的核心逻辑。六、实战三合一综合示例# 父类员工封装继承基础classEmployee:def__init__(self,name,salary):self.namename self.__salarysalary# 封装私有属性defget_salary(self):returnself.__salarydefwork(self):pass# 多态模板方法# 子类1程序员继承重写classProgrammer(Employee):defwork(self):print(f{self.name}正在写代码月薪{self.get_salary()}元)# 子类2产品经理继承重写classPM(Employee):defwork(self):print(f{self.name}正在写需求月薪{self.get_salary()}元)# 多态调用defwork(emp):emp.work()# 创建对象pProgrammer(张三,20000)pmPM(李四,18000)# 统一调用不同表现work(p)# 输出张三正在写代码月薪20000元work(pm)# 输出李四正在写需求月薪18000元结语封装隐藏内部细节仅暴露安全接口保护数据安全继承子类复用父类属性和方法支持方法重写减少代码冗余多态基于继承和方法重写同一接口实现不同行为提升代码灵活性封装、继承、多态不是纸上谈兵的理论而是写高质量Python代码的必备工具做项目时用封装保护核心数据有重复代码时用继承快速复用需要灵活扩展时用多态简化逻辑。

相关文章:

Python面向对象:封装、继承、多态

作为Python面向对象编程(OOP)的三大核心特性,封装、继承、多态是从编程新手进阶到熟练开发者的必备知识。它们不是晦涩的理论,而是能让代码更简洁、复用性更强、扩展性更好的实用工具。 一、什么是面向对象? 在讲三大特…...

COMSOL锂枝晶生长仿真模拟:四场耦合(化学场、浓度场、电场、应力场)

comsol锂枝晶生长仿真模拟-应力耦合。 化学场、浓度场、电场、应力场,四场耦合模拟锂枝晶的生长。锂金属负极在固态电池中总爱搞事情,枝晶刺穿隔膜的戏码天天上演。实验室里做破坏性测试成本太高,数值仿真就成了预判枝晶生长路径的透视眼。CO…...

SecGPT-14B+OpenClaw联调指南:解决模型响应超时问题

SecGPT-14BOpenClaw联调指南:解决模型响应超时问题 1. 问题背景与场景定位 上周在尝试用OpenClaw调用SecGPT-14B分析一份12万字的网络安全报告时,遭遇了令人头疼的响应超时问题。这个场景很典型——当我们需要处理长文本安全分析时,模型推理…...

【Pygame】第15章 游戏人工智能基础、行为控制与寻路算法实现

摘要 人工智能是游戏开发中的重要组成部分,它能够赋予非玩家角色更自然的行为表现,使游戏世界显得更加真实、生动,并且具有挑战性。 在 2D 游戏中,AI 通常并不追求真正意义上的“智能”,而是通过一系列规则、状态和算…...

智力能效:Token之上的竞争

AI软件竞争的本质是智力能效的竞争。 编者按 2025 年初, Anthropic 宣布 Claude API的价格比GPT-4高出50%。原本以为会出现的大量客户流失却在六个月后呈现出截然相反的走向:Claude在企业市场的采用率不仅没有下降,反而上升了。 过去两年,无数…...

【网络安全干货】黑客内网渗透零基础入门,超详细基础知识手把手教学

0x01 内网概述 内网也指局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的历程安排、电子邮件和传真通信服务等功能。 内…...

从 AI 助手到 ADT 自动化桥梁:全面解析 Vibing Steampunk 的定位、能力边界与典型使用场合

Vibing Steampunk 这个 GitHub Repository,如果只看名字,很容易让人误以为它只是一个面向 Steampunk,也就是 SAP BTP ABAP environment 的小工具。可一旦把 README、架构文档、CLI 指南和相关实现说明读完,你会发现它的真实定位要大得多:它并不是一个普通的 ABAP 示例项目…...

内网渗透零基础入门教程!小白也能轻松搞懂内网渗透基础知识点

内网渗透初探 | 小白简单学习内网渗透 0x01 基础知识 内网渗透,从字面上理解便是对目标服务器所在内网进行渗透并最终获取域控权限的一种渗透。内网渗透的前提需要获取一个Webshell,可以是低权限的Webshell,因为可以通过提权获取高权限。 …...

OpenClaw邮件处理助手:Qwen3-14b_int4_awq分类与自动回复

OpenClaw邮件处理助手:Qwen3-14b_int4_awq分类与自动回复 1. 为什么需要邮件自动化助手 每天早晨打开邮箱,看到堆积如山的未读邮件总是让人头疼。订阅的新闻简报、工作沟通、广告推广混杂在一起,手动分类和回复消耗了大量时间。作为技术从业…...

LN2266 超小型 低电压启动 PWM 控制 升压 DC/DC 电压调整器

■ 产品概述 LN2266 是一款微型、高效率、升压 DC/DC 调整器。电路由电流模 PWM 控制环路,误差放大器,斜波产生电路,比较器和一个功率开关等模块组成。该芯片可在较宽负载范围内高效稳定的工作。低于 1V 的启动电压,可以使用 1-4节…...

PregelProtocol——定义了“LangChain执行体“最小功能集

1. 配置绑定通过前面的内容我们会发现RunnableConfig这个对象几乎时无所不在,我们在调用Pregel对象的时候可以将它作为参数,用来提供用于控制其执行行为(比如迭代限制,并发控制等)的配置。执行引擎还将它作为容器用来下…...

线程池项目(1)

推荐去看施磊老师的课程 需要课程或者代码的可以评论,看到会回复的,免费的并发与并行定义并发:多个线程在单核上轮流占用 CPU 时间片,物理上串行执行,但由于时间片较短,看起来像是同时执行。并行:多个线程在多核或多 C…...

Klipper固件全攻略:从配置到优化解决3D打印核心难题

Klipper固件全攻略:从配置到优化解决3D打印核心难题 【免费下载链接】klipper Klipper is a 3d-printer firmware 项目地址: https://gitcode.com/GitHub_Trending/kl/klipper 3D打印技术面临精度不足、振动干扰和配置复杂等挑战,Klipper固件通过…...

YOLOv8n-face人脸检测架构:6MB模型实现92%精度与25ms延迟的企业级方案

YOLOv8n-face人脸检测架构:6MB模型实现92%精度与25ms延迟的企业级方案 【免费下载链接】yolov8-face yolov8 face detection with landmark 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8-face YOLOv8n-face是基于YOLOv8架构优化的轻量级人脸检测模型…...

【第五周】关键词解释:稀疏自编码器(Sparse Autoencoder,简称 SAE)

🧠 当我们在谈论"理解"大模型时,我们在谈论什么?今天我们要聊的关键词,可能是2024-2025年大模型可解释性领域最炙手可热的技术之一:稀疏自编码器(Sparse Autoencoder,简称 SAE&#x…...

ASTM D4169针刺棉手袋的产品有效期验证方案

针刺棉手袋的产品有效期验证,核心是确定产品在正常使用条件下的使用寿命(通常以使用次数或年限表示),而不仅仅是物理保质期。 结合你之前关注医疗器械运输验证的背景,这里需强调:针刺棉手袋的“有效期”验…...

JDK-02 | 我为什么越来越喜欢用 Java 的 Text Blocks

这是专栏第 2 篇。 如果第一篇 record 是在“模型表达”上让我轻松,Text Blocks 则是在“日常编码和代码审查”上让我明显省力。 我先给结论:Text Blocks 不只是少写几个 +,它真正解决的是多行文本在代码中的可读性、可评审性和可回归性。 一、我为什么会认真用这个特性 …...

Linux生产环境性能优化:内存优先策略,彻底规避Swap性能损耗

Linux生产环境性能优化:内存优先策略,彻底规避Swap性能损耗 前言 作为深耕企业级运维与安全领域的从业者,我们在Oracle/SAP HANA数据库、VMware虚拟化、K8s云原生集群、PrometheusELK监控体系的生产运维中,最常遇到的性能痛点之一…...

LLM 是怎么学习的?训练过程大揭秘

系列:大语言模型原理科普(5 篇) 本篇:第 2 篇 难度:⭐⭐ 零基础 浅显技术 字数:约 9000 字 阅读时间:20 分钟📖 开篇:LLM 不是生来就懂 想象一下,你刚出生的…...

手撕 Transformer (2):嵌入层和位置编码的实现上篇文章讲过,Transformer 可分为四个部分:输入、输出、编码器、解

嵌入层的作用:为了将文本中词汇的数字表示转换为向量表示(语义向量),这样后续神经网络就可以对其进行计算了。 1.1 代码实现 import torchimport torch.nn as nnimport mathfrom torch.autograd import Variableclass Embeddings…...

【数字孪生实战案例】如何给电子地图标记点实现三维点位同款的视角切换效果?~山海鲸可视化

在可视化项目中,常规电子地图标记点仅支持基础点位标注,无法联动视角切换;本文讲解如何为地图标记点复刻三维标记的视角跳转能力,实现点击点位即可一键切换预设场景视角。 1.在左侧组件库添加“GIS电子地图(基础&#…...

阿姆智创15.6寸工控一体机厂家,源头智造ODM定制方案,赋能SMT产线及设备场景

阿姆智创15.6寸工业触控工控一体机,以强悍硬件性能、丰富工业接口、稳定系统适配与一站式解决方案,深度服务SMT产线、运动控制、机器视觉等工业场景,为设备厂商与制造企业提供高可靠、可定制、易集成的智能控制终端,助力工业自动化…...

Redis专题(一)

1. 主从部署主从复制主要⽤于实现数据的冗余备份和读分担,并不是真正的高可用。一个主节点,一个或者多个从节点。同步数据的方向:单向 ,只能主节点到从节点。作用:数据冗余:除了数据持久化之外的一种数据冗…...

ToClaw全方位介绍:你的第一只“龙虾”AI助手,一分钟轻松领养!

ToClaw全方位介绍:你的第一只“龙虾”AI助手,一分钟轻松领养! 一、先来聊聊这只“龙虾”的故事 2026年开年,如果问中文互联网最火爆的技术热词是什么,那一定非「OpenClaw」莫属。这个被大家亲切称为“龙虾”的开源项目…...

创建基础数据表后数据无法保存怎么排查_权限设置与回滚处理

...

Docker 安装 Redis 完整实操教程(新手专用,数据不丢失)

本教程全程使用官方源,无第三方镜像,步骤简单易懂,重点解决「重启数据丢失」「权限异常」问题,新手可直接复制命令操作,无需额外配置。一、前置准备(必做)确保你的电脑已安装 Docker&#xff08…...

养鸡场规划:如何计算所需农场数量

在养鸡业中,如何高效地管理和规划农场的使用是一个关键问题。最近,我遇到了一位养鸡场主的需求,他需要根据每天的鸡出栏数据来计算所需农场的数量。今天,我们就来探讨如何通过编程解决这个问题。 问题背景 假设你有一个包含以下数…...

宝塔面板PHP8.0如何快速安装Redis缓存扩展_在PHP设置的安装扩展模块中一键配置

宝塔面板PHP 8.0下无法一键安装Redis扩展,因官方源无适配预编译包且构建脚本不兼容ZTS/NTS、phpize路径及头文件要求;须用pecl手动编译redis-5.3.7并正确配置php.ini。宝塔面板 PHP 8.0 下无法通过「安装扩展」一键启用 Redis,是因为官方源里…...

CUDA12.4环境适配:OpenClaw调用Qwen3-14B镜像的驱动配置详解

CUDA12.4环境适配:OpenClaw调用Qwen3-14B镜像的驱动配置详解 1. 为什么需要关注CUDA环境适配 上周我在本地部署Qwen3-14B镜像时,遇到了一个典型问题:模型加载到一半突然崩溃,控制台只留下一行模糊的CUDA错误提示。经过两天排查才…...

红烧肉制作技术详解

红烧肉制作技术详解 红烧肉是一道传统的中式美食,以其色泽红亮、口感酥烂、味道浓郁而闻名。本文将详细介绍红烧肉的制作步骤及技巧,帮助你在家也能做出美味的红烧肉。 材料准备 五花肉 500克生姜 适量大葱 适量八角 2颗桂皮 1小块冰糖 适量料酒 适量老抽…...