python 里面到底是什么
下面把咱们今天聊过的全部内容按出现顺序打包成一张“速查地图”,你复制保存即可当备忘录。
1. 三种“看起来像”的方法
| 写法 | 是否特殊方法 | 自动调用时机 | 本质用途 |
|---|
__repr__ | ✅ | repr(obj) / 交互式回显 | 官方内置的默认方法,魔法方法 |
repr__ | ❌ | 只能手动 obj.repr__() | 普通函数,名字巧合 |
__repr | ❌ | 手动 obj._Cls__repr() | 普通函数,被 name-mangling |
2. 名称改写(name-mangling)规则
- 仅对类内部以
__xxx 开头且结尾无双下划线的标识符生效。
- 自动替换成
_ClassName__xxx,防止子类意外覆盖。
- 不是“绝对隐藏”,只是“改名”。
3. 访问控制“下划线约定”
| 前缀 | 是否改名 | 外部可见性 | 语义 |
|---|
单下划线 _x | ❌ | 可见 | “受保护”,靠约定 |
双下划线 __x | ✅ | 需 _Cls__x | “私有”,靠机制 |
首尾双下划线 __x__ | ❌ | 可见 | Python 保留的“魔术”成员,不要自己发明 |
4. 类内部方法格式速记
- 实例方法:第一个参数必须是
self。
- 类方法:
@classmethod + cls。
- 静态方法:
@staticmethod 无隐含参数。
- 命名:小写 + 下划线(snake_case);私有用
__xxx。
5. 真正把成员“藏起来”的套路
- 用
__xxx 让名字被改写。
- 类定义结束后
delattr(cls, 'xxx') 从类字典抹掉。
- 封装
@hidden 装饰器(示例已给)可一键删除。
6. @property 全家桶
| 装饰器 | 作用 |
|---|
@property | 把方法变成“只读属性” |
@xxx.setter | 添加可写逻辑 |
@xxx.deleter | 添加可删逻辑 |
内部赋值务必用私有变量 _x 避免递归 | |