Python 类封装功能:面向对象编程的基础知识
1. 什么是封装封装Encapsulation是面向对象编程OOP的三大核心特性之一另外两个是继承和多态。封装的核心思想是将数据属性和操作数据的方法方法捆绑在一起形成一个独立的单元——类Class。通过封装我们可以隐藏对象的内部实现细节只对外暴露必要的接口从而提高代码的安全性、可维护性和可重用性。2. 封装的基本实现在 Python 中封装主要通过类来实现。一个类可以包含属性和方法并通过访问控制来管理对内部数据的访问。2.1 定义类与实例属性class Student: def __init__(self, name, age): # 实例属性 self.name name self.age age def introduce(self): return f我叫{self.name}今年{self.age}岁。 创建对象 stu1 Student(张三, 18) print(stu1.introduce()) # 输出我叫张三今年18岁。2.2 访问控制公有、保护与私有Python 通过命名约定来实现不同级别的访问控制公有成员Public普通命名如name、age可以在类的外部直接访问。保护成员Protected以单下划线开头如_protected_var这是一种约定表示该成员仅供类内部和子类使用但 Python 并不强制限制外部访问。私有成员Private以双下划线开头如__private_varPython 会进行名称改写Name Mangling使其在类外部难以直接访问从而实现一定程度的保护。class BankAccount: def __init__(self, owner, balance): self.owner owner # 公有属性 self._bank_name 某银行 # 保护属性 self.__balance balance # 私有属性 def get_balance(self): # 通过公有方法访问私有属性 return self.__balance def deposit(self, amount): if amount gt; 0: self.__balance amount return True return False account BankAccount(李四, 1000) print(account.owner) # 正常访问李四 print(account._bank_name) # 可以访问但不建议某银行 print(account.__balance) # 直接访问会报错AttributeError print(account.get_balance()) # 通过方法访问10003. 封装的优点数据保护防止外部代码随意修改对象的内部状态确保数据的完整性和安全性。接口简化用户只需要知道如何使用类提供的公有方法无需了解内部复杂的实现逻辑。代码维护内部实现的修改不会影响外部代码的使用只要接口保持不变。模块化将相关的数据和操作封装在一起提高了代码的模块化程度。4. 属性装饰器更优雅的封装Python 提供了property、属性名.setter和属性名.deleter装饰器可以让我们以访问属性的语法来调用方法实现更精细的控制。class Rectangle: def __init__(self, width, height): self._width width self._height height property def width(self): 获取宽度 return self._width width.setter def width(self, value): 设置宽度并进行合法性检查 if value lt; 0: raise ValueError(宽度必须大于0) self._width value property def area(self): 计算面积只读属性 return self._width * self._height rect Rectangle(5, 3) print(rect.width) # 输出5 rect.width 10 # 调用 setter 方法 print(rect.area) # 输出30 rect.area 100 # 报错area 是只读属性5.案例示例1使用turtle模块结合类封装以下功能 # 绘制圆形绘制矩形绘制三角形import turtle class ShapeDraw: def __init__(self, speed 3): self.t turtle.Turtle() self.t.speed(speed) self.screen turtle.Screen() def draw_circle(self, x, y, r, color black, pensize 1): self.t.up() self.t.goto(x, y - r) self.t.down() self.t.color(color) self.t.pensize(pensize) self.t.circle(r) def draw_jx(self, x ,y, width, heigth, color black, pensize 1): self.t.up() self.t.goto(x, y) self.t.down() self.t.color(color) self.t.pensize(pensize) for _ in range(2): self.t.forward(width) self.t.right(90) self.t.forward(heigth) self.t.right(90) def draw_triangel(self, x, y, length, color pink, pensize 2): self.t.up() self.t.goto(x, y) self.t.down() self.t.color(color) self.t.pensize(pensize) for _ in range(3): self.t.forward(length) self.t.right(120) def hide_turtle(self): self.t.hideturtle() def showturtle(self): self.t.showturtle() def show(self): # 新增保持窗口显示 self.screen.mainloop() drawer ShapeDraw() drawer.draw_circle(150, 100, 50, red) drawer.draw_jx(-200, 200, 100, 150) drawer.draw_triangel(150, -150, 150, pink) drawer.hide_turtle() drawer.showturtle() drawer.show()运行结果示例2创建一个点类x,y 随机两个点求两个点之间的距离import random class Points: def __init__(self, x, y): self.x x self.y y def get_x(self): return self.x def get_y(self): return self.y ps [(random.randint(1, 10),random.randint(1, 10)) for _ in range(2)] for p in ps: print(p) p1 Points(ps[0][0], ps[0][1]) p2 Points(ps[1][0], ps[1][1]) dis ((p1.get_x() - p2.get_x()) ** 2 (p1.get_y() - p2.get_y()) ** 2) ** 0.5 print(dis)运行结果示例3创建一个圆Circle类 # 为该类提供一个初始化方法用于初始化半径 # 为该类提供两个方法 # 方法一用 于求圆的面积方法二用于求圆的周长class Circle: def __init__(self, radius): self.radius radius def area(self): return self.radius * self.radius * 3.14 def c(self): return self.radius * 2 * 3.14 c1 Circle(1) print(c1.area()) print(c1.c())6. 封装的实际应用场景6.1 数据验证在设置属性值时进行数据验证确保数据的有效性。6.2 计算属性将需要计算得到的值封装为属性对外提供统一的访问接口。6.3 隐藏复杂实现将复杂的算法或数据处理过程封装在类内部对外提供简单的调用方法。7. 总结封装是 Python 面向对象编程的基石。通过合理使用类、访问控制和属性装饰器我们可以构建出结构清晰、安全可靠、易于维护的代码。掌握封装不仅有助于编写更好的 Python 程序也是理解更高级设计模式的前提。在实际开发中建议将不需要对外暴露的属性和方法设为私有。通过公有方法或属性装饰器来提供对内部数据的受控访问。保持类的职责单一避免创建过于庞大的类。

相关新闻

C++ STL Set容器完全指南:从有序红黑树到无序哈希表

C++ STL Set容器完全指南:从有序红黑树到无序哈希表

在C标准模板库(STL)中,关联容器是一类通过键(key)来组织和管理数据的容器,与vector、list这类按位置访问的序列容器有着本质区别。关联容器主要分为两大类:基于红黑树实现的有序关联容器和基于哈…

2026/8/1 2:58:52 阅读更多 →
模玩渠道商英格伦的商业逻辑:从电商红利到行业挑战

模玩渠道商英格伦的商业逻辑:从电商红利到行业挑战

这次我们来看一个关于模玩圈老店“英格伦”的深度故事。如果你玩过高达、EVA、变形金刚,或者买过国产拼装模型,大概率听过这家店的名字。它从一家普通的线上小店,成长为模玩圈内颇具影响力的渠道商,其发展历程几乎见证了中国模玩市…

2026/8/1 2:58:52 阅读更多 →
论文阅读笔记 | The Script is All You Need: 对话到电影级视频生成的 Agentic 框架

论文阅读笔记 | The Script is All You Need: 对话到电影级视频生成的 Agentic 框架

The Script is All You Need: An Agentic Framework for Long-Horizon Dialogue-to-Cinematic Video Generation 1. Motivation 当前的视频生成模型(如 Sora2-Pro、Veo3.1、Wan2.5)虽然已经能够根据文本 prompt 合成高质量的短视频,但在面对…

2026/8/1 2:58:52 阅读更多 →

最新新闻

第2章 新篇08 莹姐申请转岗2

第2章 新篇08 莹姐申请转岗2

接上周,本周按约定莹姐1对1谈话。一、莹姐觉得不公平:原本觉得工作没有高低贵贱之分,但现在发现绩效总是集中在做“重点项目”的人身上,其他人也付出了很多,绩效却不够好。运维做得好,也应该是一种能力的体…

2026/8/1 3:41:09 阅读更多 →
基于 Free Pascal 从零编写裸机操作系统(一)

基于 Free Pascal 从零编写裸机操作系统(一)

前言 绝大多数入门操作系统教程都会选用 C 语言,很少有人尝试用 Pascal 开发裸内核。OSDev 官网提供了一套完整的 Free Pascal Bare Bones 最小操作系统示例,无需依赖 DOS、Linux、Windows 标准库,完全运行在 32 位保护模式下,兼…

2026/8/1 3:41:09 阅读更多 →
【方达炬治学】方达炬:在地球表面设置22°气温生命环境线,作为生命宜居带,确立生命活动周期同太阳活动相适应、及应对太阳工程日光威胁。

【方达炬治学】方达炬:在地球表面设置22°气温生命环境线,作为生命宜居带,确立生命活动周期同太阳活动相适应、及应对太阳工程日光威胁。

【方达炬治学】方达炬:在地球表面设置22气温生命环境线,作为生命宜居带,确立生命活动周期同太阳活动相适应、及应对太阳工程日光威胁。

2026/8/1 3:41:09 阅读更多 →
应届生注意:别浪费在校时间,AI能力将成为求职分水岭

应届生注意:别浪费在校时间,AI能力将成为求职分水岭

2026届全国普通高校毕业生规模达1270万人,同比增加48万,再创历史新高。 几乎同一时间,国家发改委在2026世界人工智能大会上公布:重点行业人工智能整体渗透率突破80%,今年相关产业增速预计超30%;工信部同步披…

2026/8/1 3:41:09 阅读更多 →
从“对话“到“执行“:MCP协议如何统一AI Agent与真实世界的连接方式?

从“对话“到“执行“:MCP协议如何统一AI Agent与真实世界的连接方式?

从"对话"到"执行":MCP协议如何统一AI Agent与真实世界的连接方式?当AI Agent只会"纸上谈兵"的时代终结,MCP协议正在成为连接认知与行动的统一桥梁。本文深入解析MCP的核心架构、无状态化演进,以及它…

2026/8/1 3:41:09 阅读更多 →
STM32阻塞与非阻塞延时:从系统卡死到高效多任务编程

STM32阻塞与非阻塞延时:从系统卡死到高效多任务编程

1. 从一次“卡死”的调试经历说起那天下午,我正在调试一个基于STM32的智能小车项目。小车的核心逻辑很简单:主循环里,超声波传感器测距,然后根据距离控制电机和舵机。我信心满满地烧录了代码,结果小车启动后&#xff0…

2026/8/1 3:40:09 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →