核心是将分散状态与规则封装进可控类中:私有属性限制访问、方法内置校验与日志、实例隔离避免冲突、支持无破坏性安全扩展。

用私有属性替代全局变量,核心不是“删掉全局变量”,而是把原本散落在各处的状态和规则,收进一个可控、可查、可维护的类里。全局变量难管,是因为谁都能读写、改了没通知、出错了找不到源头;而私有属性配合合理的方法封装,能把访问路径收窄、校验逻辑内置、变更影响圈定。
把状态从“到处飘”变成“专属保管”
比如原来有个全局计数器:
counter = 0
def increment(): global counter; counter += 1
def get_count(): return counter
问题在于:任何模块都能直接改 counter,没人拦着,也没人知道谁在什么时候动了它。
换成类的私有属性后:
- 定义一个 Counter 类,把 __count 设为私有(双下划线)
- 只暴露 increment() 和 get_count() 这两个方法
- 所有修改必须走 increment(),里面可以加日志、限频、边界检查
用方法封装判定逻辑,避免重复写 if
原来处理配置时可能这样写:
DEBUG_MODE = Trueif DEBUG_MODE:
print("debug info")
if not DEBUG_MODE:
send_to_production_log()
每次用都要判断,分散在十几处,改开关就得全搜。
改成类后:
- 把 __debug_mode 设为私有
- 提供 log() 方法,内部自动判断并路由到调试输出或生产日志
- 后续新增日志类型(如审计日志),只需改这个方法,调用方完全无感
通过实例隔离,解决多场景冲突
全局变量是单例的,但现实里常需多个独立状态。例如同时管理用户会话和后台任务计数:
- 原来用两个全局变量 user_session_id 和 task_counter,容易混淆、误赋值
- 现在分别建 UserSessionManager 和 TaskCounter 两个类
- 每个类有自己的私有属性,互不干扰,还能各自定制初始化和清理逻辑
私有属性 + 类方法,自然支持安全扩展
当需要加权限控制或审计追踪时,全局变量几乎无法增量改造:
- 在类中,只需在 setter 方法里插入一行日志或校验
- 比如 set_balance(new_val) 内部可检查是否为正数、是否超阈值、是否记录操作人
- 外部调用不变,但行为已升级,没有破环性











