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)

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

相关推荐
syker17 分钟前
AIFerric深度学习框架:自研全栈AI基础设施的技术全景
开发语言·c++
HSunR29 分钟前
dify 搭建ai作业批改流
开发语言·前端·javascript
zhaoyong22234 分钟前
MySQL 存储过程中字符集与排序规则不匹配导致查询性能下降的解决方案
jvm·数据库·python
sinat_3834373634 分钟前
golang如何从Python转型Go开发_golang从Python转型Go开发攻略
jvm·数据库·python
代码不加糖37 分钟前
2026 跨境电商独立站实战:从 0 到 1 搭建高转化 SaaS 商城(附源码)
开发语言·前端·javascript
rockey62744 分钟前
基于AScript的python3脚本语言发布啦!
python·c#·.net·script·python3·eval·expression·function·动态脚本
时空系1 小时前
第9篇:成员功能——为结构体添加能力 Rust中文编程
开发语言·网络·rust
gqk011 小时前
Python入门
python
MATLAB代码顾问1 小时前
多种群协同进化算法(MPCE)求解大规模作业车间调度问题——附MATLAB代码
开发语言·算法·matlab
Muyuan19981 小时前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi