Python面向对象编程:封装性

Python 没有严格的 private/protected 关键字,靠命名约定名称改写实现封装。

一、Python 类里有三种"权限"成员

公开、保护、私有,全都有,只是写法和 Java/C++ 不一样。

1. 公开成员(最常用)

不加任何下划线,外部、子类都能随便访问。

2. 保护成员(命名约定)

单下划线 _

  • 只是约定:这是内部用的,外部别乱碰

  • 可以被访问,Python 不会阻止你,但懂 Python 的人都遵守这个约定

class A:

def init(self):

self._age = 20 # 保护属性

3. 私有成员(自动名称改写

双下划线 __

  • Python 会自动改名,外部不能直接访问,子类也不能直接访问

【什么是自动改名(Name Mangling)

当你在类里写:

class Person:

def init(self):

self.__name = "小明" # 双下划线开头

Python 不会真的存成 __name ,它会自动改成: _类名__属性名

也就是: __name自动变成 _Person__name 这就叫 自动改名。

所以你外部访问 __name 会报错

p = Person()print(p.__name) # ❌ 报错!不存在这个名字 因为 Python 已经把它改名了,你还在用旧名字,当然找不到。

但你用它改后的名字,就能访问

print(p._Person__name) # ✅ 小明

这就是为什么说:Python 没有真正的私有,只是改名防误触,不是防黑客。

  • 作用:防止意外覆盖/修改

class A:

def init(self):

self.__secret = "私有" # 私有属性

二、总结

  • name → 公开(谁都能访问)

  • _name → 保护(约定内部用)

  • __name → 私有(改名防误触)

Python 类里三种成员都有,不是只有私有!

三、注意

  • 日常写代码:公开 + 单下划线 + property 最常用- 双下划线私有很少用,除非你真的要防覆盖

  • Python 没有强制权限,靠约定 + 自觉

相关推荐
jieyucx1 天前
Go语言深度解剖:Map扩容机制全解析(增量扩容+等量扩容+渐进式迁移)
开发语言·后端·golang·map·扩容策略
YJlio1 天前
7.4.5 Windows 11 企业网络连接与网络重置实战:远程访问、本地策略与故障恢复
前端·chrome·windows·python·edge·机器人·django
脏脏a1 天前
【C++模版】泛型编程:代码复用的终极利器
开发语言·c++·c++模版
island13141 天前
【C++仿Muduo库#3】Server 服务器模块实现上
服务器·开发语言·c++
散峰而望1 天前
【算法竞赛】C/C++ 的输入输出你真的玩会了吗?
c语言·开发语言·数据结构·c++·算法·github
小龙报1 天前
【C语言】内存里的 “数字变形记”:整数三码、大小端与浮点数存储真相
c语言·开发语言·c++·创业创新·学习方法·visual studio
深耕AI1 天前
【VS Code避坑指南】点击Python图标提示“没有Python环境”,选择安装uv后这堆输出到底是什么意思?
开发语言·python·uv
第一程序员1 天前
Rust生命周期管理实战指南:从困惑到掌握
python·github
2301_789015621 天前
C++:继承
c语言·开发语言·c++
程序员威哥1 天前
实战!Python爬京东商品评论:从采集到情感分析+词云可视化,新手30分钟跑通
开发语言·爬虫·python·scrapy