Python类属性下划线的意义

在Python中,类属性(class attribute)前面带有下划线的命名约定有一些特殊的含义,但它并不会影响属性的实际行为。这是一种命名约定,用于指示属性的用途和访问级别。以下是一些常见的下划线命名约定:

  1. **单个前导下划线 `_`:**表示这是一个"protected"属性,即它应该被视为受保护的,不应该在类的外部直接访问。然而,这只是一种约定,并不会强制限制访问。
python 复制代码
    class MyClass:
        def __init__(self):
            self._protected_attribute = 42

    obj = MyClass()
    print(obj._protected_attribute)  # 这样的访问是合法的,但是被认为是不推荐的
  1. **单个尾随下划线 `_`:**用于避免与Python关键字的命名冲突。例如,如果你的属性名与Python的关键字相同,可以在属性名后加一个下划线。
python 复制代码
    class MyClass:
        def __init__(self):
            self.class_ = "This is a class attribute"

    obj = MyClass()
    print(obj.class_)  # 合法的访问,避免了关键字冲突
    ```
  1. **双前导下划线 `__`:**表示名称修饰,Python会在名称前面添加"_类名"以防止名称冲突(名称重整)。这被称为名称修饰(name mangling)。
python 复制代码
    class MyClass:
        def __init__(self):
            self.__mangled_attribute = 42

    obj = MyClass()
    # 在内部进行名称修饰,实际属性名为 "_MyClass__mangled_attribute"
    print(obj._MyClass__mangled_attribute)

总体而言,这些下划线的使用是一种约定,用于向其他开发者传达属性的意图。在大多数情况下,这只是一种命名约定,并不会对属性的行为产生实质性的影响。

相关推荐
Warson_L3 分钟前
高性能架构设计
python·go
databook37 分钟前
新数据到手,先跑哪几步检查
python·数据分析
czq_26867194871 小时前
Python打卡第46天
开发语言·python
Flynt2 小时前
日涨4000星的OSINT工具,我拿Linus的用户名和一个随机字符串实测了一遍
python·安全
Evand J4 小时前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
BaiPeter5 小时前
ZPL文件预览
开发语言·c++
曲径海盗5 小时前
【Python 学习第 53 天】列表基础
python·学习笔记·编程入门
Dumbness5 小时前
群里 @ 机器人发"查订单",指令一条都没命中:微信群机器人在路由前漏掉的几步归一化
python·微信
用户1614840955455 小时前
用 M4 Pro 跑羽毛球视频 AI 分析(二):TrackNet MPS 加速 3.2 倍、卡尔曼滤波补漏与自动回合剪辑
python
用户4019925568616 小时前
基于对话树回溯的社媒评论流买方意图识别与噪音过滤实践
python