Python 类封装功能:面向对象编程的基础知识

发布时间:2026/11/13 20:36:51

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 程序也是理解更高级设计模式的前提。在实际开发中建议将不需要对外暴露的属性和方法设为私有。通过公有方法或属性装饰器来提供对内部数据的受控访问。保持类的职责单一避免创建过于庞大的类。
延伸阅读

更多相关文章

2026/11/13 20:36:51

Spring Boot中Jackson ObjectMapper核心配置详解与实战避坑指南

1. 项目概述:为什么ObjectMapper的配置值得深究?如果你用过Spring Boot,那Jackson的ObjectMapper对你来说肯定不陌生。它就像项目里那个最勤恳的“数据搬运工”,默默地把Java对象变成JSON字符串,或者把JSON字符串变回J…

2026/11/11 14:13:32

Unity状态机实战:复刻空洞骑士BOSS毛里克的行为逻辑与碰撞交互

1. 项目概述与核心思路 最近在复刻《空洞骑士》的第二个BOSS“燥郁的毛里克”,这活儿挺有意思。毛里克这个BOSS,在游戏里给人的第一印象就是“莽”——横冲直撞,压迫感十足,但它的行为模式其实很有规律,是学习Unity中状…

2026/11/12 9:07:16

蒸汽教育案例库怎么看?不同背景留学生能找到哪些参考

搜索“蒸汽教育怎么样”时,很多留学生和家长会先进入蒸汽教育案例库,寻找与自己学校、专业或目标公司相近的案例。 但真正开始比较后,学生常常发现:即使两个人都读计算机,求职问题也可能完全不同。有人简历条件不错&am…

2026/11/13 20:32:43

初级电工作业模拟考试怎么过?上岗必备实操技巧全解析

初级电工作业模拟考试怎么过?上岗必备实操技巧全解析 实操考试心里没底怕挂科?初级电工作业模拟考试作为电工证上岗必备的门槛,很多人在考试前总是焦虑,担心自己准备不充分、操作不熟练,最终导致考试失败。别急,今天就用一个真实案例,带你了解考试的关…

2026/11/13 20:32:43

成都电工证去哪考好些 官方回应实操考试心里没底怕挂科

成都电工证去哪考好些 官方回应实操考试心里没底怕挂科 实操考试心里没底怕挂科,这是很多准备报考成都电工证的人最真实的心声。尤其是对于南阳中小施工企业的负责人来说,电工证不仅关系到日常作业的安全性,也直接影响企业能否合规开展业务。 官方回应…

2026/11/13 20:32:43

罗庄区电工证哪里考取?2026河南最新政策下怎么考最稳妥

罗庄区电工证哪里考取?2026河南最新政策下怎么考最稳妥 你现在最头疼的事是什么? 急需特种作业证才能上岗找工作 !尤其是在南阳卧龙区,房建工程行业对特种作业证的需求越来越大,特别是电工证,几乎成了入职门槛之一。2026年河南最新政策对电工…

2026/11/13 20:32:43

焦作市低压电工证考试含金量高不高?实操考试心里没底怕挂科

焦作市低压电工证考试含金量高不高?实操考试心里没底怕挂科 实操考试心里没底怕挂科,这是很多准备考取焦作市低压电工证的电工朋友最担心的问题。尤其是在2023年底,随着各地市安全生产教育培训中心对特种作业操作证的监管越来越严格,很多电工在备考时…

2026/11/13 20:32:43

低压电工证需要实践吗?通过率揭秘实操考试不再怕挂科

低压电工证需要实践吗?通过率揭秘实操考试不再怕挂科 实操考试心里没底怕挂科?你不是一个人。低压电工证不仅是进入电力行业的“敲门砖”,也是提升个人职业竞争力的关键。很多人担心,低压电工证是否真的需要动手操作?实操考试到底难不难?这篇文章就来…

2026/11/13 20:27:37

湖北初级电工证考试怎么考?郑州报考避坑指南全在这里

湖北初级电工证考试怎么考?郑州报考避坑指南全在这里 证书过期了不知道怎么复审延期?别慌,今天咱们就来聊聊【湖北初级电工证考试】的那些事,特别是 郑州报考避坑指南 ,让你少走弯路、不花冤枉钱。 为什么说湖北初级电工证考试是电工从业的第一步?…

2026/11/12 20:35:13

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/13 0:01:06

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了 你是不是也像我一样,第一次听说“高压电工证”这个名词,就感觉一头雾水?其实很多人都跟我一样,不知道去哪报名、怕被中介坑,结果花了冤枉钱还考不上。今天我就从一个在商丘培训过的学员角度,…

2026/11/13 0:01:06

黎里考电工证在哪里值不值得考

黎里考电工证在哪里值不值得考 之前考的证在外省能不能转过来?这是很多在外地工作、准备回老家发展的朋友最关心的问题。特别是在黎里地区,很多从事电力相关工作的朋友,都面临这样一个难题: 外省的电工证能否在本地使用?值不值得考?…

2026/11/13 0:01:06

毕节哪里考电工证 怎么报名学历不高也能上手

毕节哪里考电工证 怎么报名学历不高也能上手 你是不是也和我一样,学历不高,想着考个电工证,但又担心自己条件不够,怕报不上名?其实不然,只要符合条件,学历不高也能考电工证。今天就来聊聊【毕节哪里考电工证】这个问题,还有怎么报名,让你一步到位不…

2026/11/12 22:10:13

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑