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)

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

相关推荐
罗超驿5 分钟前
15.JavaScript 函数与作用域完全指南:语法、参数、表达式与作用域链实战
开发语言·前端·javascript
.千余7 分钟前
【C++】C++类与对象2:C++构造函数、运算符重载与流输入输出全面解析
c语言·开发语言·前端·c++·经验分享
郭涤生13 分钟前
C++ 高性能状态机
开发语言·c++
卡次卡次118 分钟前
vibecoding起步注意点:插件、Skills、MCP、Hooks
服务器·数据库·python·oracle
我的xiaodoujiao27 分钟前
API 接口自动化测试详细图文教程学习系列24--如何用Pytest去设计接口测试用例并执行
python·学习·测试工具·pytest
SOC罗三炮28 分钟前
OpenHuman 源码深度解构:一个 Rust 驱动的本地优先 AI 个人助手
开发语言·人工智能·rust
心怀梦想的咸鱼33 分钟前
OpenCode 接入 API 报错 read ECONNRESET:基于环境变量的证书校验绕过方案
开发语言·php
zhangfeng11331 小时前
ai 模型加密,强化版终极防盗方案 支持烧录的显卡列表
人工智能·pytorch·python
半个落月1 小时前
深入理解 Python dict 与 set:从哈希表底层到高性能实战
python
带派擂总1 小时前
Python全栈开发 Day10_用户管理系统
python