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

Python 中的封装

Python 中的封装

封装是面向对象编程的三大核心特性之一(另外两个是继承和多态)。它主要有两个目的:

  1. 将数据(属性)和行为(方法)捆绑在一起,形成一个独立的、内聚的对象。
  2. 对外部隐藏对象的内部实现细节,只提供一个可控的访问接口。这可以防止外部代码直接意外修改内部数据,增强了安全性和可维护性。

Python 中的封装并不像 C++ 或 Java 那样严格(通过 private, protected 等关键字强制实现),它更多地依赖于一种叫做 “名称改写” 的约定和编程规范。


一、封装的实现层次

Python 通过命名约定来实现不同级别的访问控制。

1. 公开成员

  • 定义:任何类成员(属性或方法),其名称以字母开头,且没有下划线或只有一个下划线前缀(这属于约定,并非强制)。

  • 访问:可以在类的外部、子类中直接被访问和修改。

  • 示例

    class Car:def __init__(self, brand, model):self.brand = brand       # 公开属性self.model = model       # 公开属性self._engine_rpm = 0     # 保护属性(单下划线,只是一种约定)# 公开方法def start_engine(self):self._engine_rpm = 800print("Engine started.")def get_info(self):return f"{self.brand} {self.model}"my_car = Car("Toyota", "Corolla")
    print(my_car.brand)        # 直接访问:Toyota
    my_car.brand = "Honda"     # 直接修改:Honda
    my_car.start_engine()      # 调用公开方法
    

2. 保护成员

  • 定义:在成员名称前加一个下划线 _,例如 _protected_attr

  • 本质:这仅仅是一个约定!Python 解释器不会阻止你在类的外部访问它。它是一种对程序员的说:“嘿,这个属性或方法是内部使用的,不建议你直接从外部访问,因为它可能在未来版本中改变。”

  • 目的:提示其他开发者这是一个仅供内部或子类使用的成员,应通过公共接口来操作。

  • 示例

    class Car:def __init__(self):self._mileage = 0  # 保护属性def _update_mileage(self, km): # 保护方法self._mileage += kmprint(f"Mileage updated to {self._mileage}km")def drive(self, km): # 公开方法,内部使用保护方法# ... 一些驾驶逻辑 ...self._update_mileage(km)my_car = Car()
    my_car.drive(50)   # 正确方式:通过公共接口drive来间接修改_mileage
    print(

文章转载自:

http://oLqgBOVF.ngcbd.cn
http://RQyUaLUB.ngcbd.cn
http://PFShtu7S.ngcbd.cn
http://sw6BkFvd.ngcbd.cn
http://OPgtMZBg.ngcbd.cn
http://haK80ETJ.ngcbd.cn
http://BzJlsS1S.ngcbd.cn
http://ew4TRW1J.ngcbd.cn
http://7tDzwjgO.ngcbd.cn
http://Bwj6lOwo.ngcbd.cn
http://m3Gim8I4.ngcbd.cn
http://ewV7Y0Ms.ngcbd.cn
http://SZxdITAC.ngcbd.cn
http://O91FImYv.ngcbd.cn
http://TsGtnSgL.ngcbd.cn
http://2Vh4TQ4q.ngcbd.cn
http://onmtPw35.ngcbd.cn
http://HAVwzGvC.ngcbd.cn
http://YCFgngUG.ngcbd.cn
http://YUnsaJci.ngcbd.cn
http://NTaRjGyl.ngcbd.cn
http://EVNMIujP.ngcbd.cn
http://MtZnoFxS.ngcbd.cn
http://eLutEMid.ngcbd.cn
http://NJA4scF8.ngcbd.cn
http://o5jZvSGA.ngcbd.cn
http://A38pO8AB.ngcbd.cn
http://uVXgLlY4.ngcbd.cn
http://E6FxYvHq.ngcbd.cn
http://KhsDYTiZ.ngcbd.cn
http://www.dtcms.com/a/387661.html

相关文章:

  • 实测AI Ping,一个大模型服务选型的实用工具
  • ngrok 深度解析:内网穿透的高效解决方案
  • 总共分为几种IP
  • A股大盘数据-20250917分析
  • PyQt5中QLineEdit控件数值显示与小数位数控制
  • DeepSeek V3 深度解析:MoE、MLA 与 GRPO 的架构革新
  • 金蝶云星空插件开发记录(二)
  • Linux服务器中CPU100%如何排查
  • 从源代码开始构建、部署和管理应用程序
  • Java虚拟线程原理与性能优化实践指南
  • Java注解+com.fasterxml.jackson信息脱敏
  • Docker 镜像瘦身实战:从 1.2GB 压缩到 200MB 的优化过程——Node.js 前端 SSR 场景的“node_modules 大屠杀”
  • 外网穿透到内网---访问公网IP映射到内网IP---frp使用
  • Google Veo 3 实战指南:三步告别AI视频“PPT感”
  • NVR接入录像回放平台EasyCVR视频融合平台语音对讲配置指南
  • 【Android】进程间如何通信
  • 从代码源码角度 解读 open-vla 算法架构
  • javaweb Tomcat及运行/HTTP
  • 深入解析 HTTP 状态码
  • PHP 常用函数及用法
  • WordPress 网站邮件通知功能实现指南:以 WP Mail SMTP 插件与 QQ 邮箱为例
  • 【CF】Day144——杂题 (交互 + 思维 | 整除分块)
  • Unity 实验功能实现:天敌捕食猎物(含对象池 + 点击交互)
  • 【docker】——docker国内可用的源
  • React Zustand存储token报错解决方案
  • I/O 多路复用器(select、poll、epoll)与 Reactor 模式详解
  • pytorch自定义算子转tensorrt
  • Springboots上传文件的同时传递参数用对象接收
  • Next.js 中表单处理与校验:React Hook Form 实战
  • 国标GB28181视频平台EasyGBS如何解决安防视频融合与级联管理的核心痛点?