Python基础教程(三十)访问限制:下划线的封印艺术之Python权限围城

Python没有private关键字,却用两条下划线构筑了精妙的访问控制体系——这是开发者自律与语言智慧的完美平衡。


下划线法则:Python的权限密码

前缀形式

技术机制

访问范围

典型场景

var

无修饰

完全公开

公共API接口

_var

约定规范

模块/类内部

保护属性、工具函数

__var

名称修饰

类内私有

关键数据封装

__var__

保留魔法方法

系统级调用

__init__, __str__

名称修饰:编译时的变形术

class SecureData:
    def __init__(self):
        self.__secret = "NSA级加密数据"  # 变形为_SecureData__secret

obj = SecureData()
print(obj.__dict__)  # 输出{'_SecureData__secret': 'NSA级加密数据'}
  • 解释器在编译时自动重写双下划线变量
  • 防止子类意外覆盖父类属性
  • 非真正私有:仍可通过变形名访问

属性控制:@property的优雅封印

class BankAccount:
    def __init__(self):
        self._balance = 0  # 保护属性
    
    @property
    def balance(self):     # 只读视图
        return self._balance
    
    @balance.setter
    def balance(self, value):  # 写入校验
        if value < 0: 
            raise ValueError("余额不可为负")
        self._balance = value
  • 将方法伪装成属性访问
  • 实现getter/setter逻辑控制
  • 保持调用语法的简洁性

模块级防护:__all__的边界守卫

# module.py
__all__ = ['public_api']  # 限制from module import *的范围

def public_api(): pass

def _internal_helper(): pass  # 隐藏内部实现
  • 控制星号导入(import *)的暴露范围
  • 配合_前缀实现模块接口最小化
  • 遵循"宽进严出"的API设计原则

最佳实践:单下划线作警示牌,双下划线作安全门。下个思考:当使用__dict__突破封印直接访问私有变量时,我们究竟获得了自由,还是打开了潘多拉魔盒?

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值