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)

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

相关推荐
廋到被风吹走2 分钟前
【Spring】DefaultListableBeanFactory 详解
java·python·spring
子夜江寒2 分钟前
Python 操作 MySQL 数据库
数据库·python·mysql
灰色人生qwer4 分钟前
VS Code 配置Java环境
java·开发语言
yyy(十一月限定版)4 分钟前
C语言——排序算法
c语言·开发语言·排序算法
tgethe5 分钟前
Java 链表(LinkedList)
java·开发语言·链表
梦帮科技9 分钟前
第二十二篇:AI驱动的工作流优化:性能瓶颈自动检测
数据结构·数据库·人工智能·python·开源·极限编程
myzzb13 分钟前
python调用ffmpeg.exe封装装饰类调用
python·学习·ffmpeg·开发
小鸡吃米…14 分钟前
Python - 多重继承
开发语言·python
悟能不能悟14 分钟前
java list怎么进行group
java·python·list
在等星星呐21 分钟前
人工智能从0基础到精通
前端·人工智能·python