当前位置: 首页 > news >正文

python类方法名加前缀下划线

单下划线前缀

在类的方法名或属性名前加单下划线 _ 是一种约定俗成的规范,用来表示这是一个 “受保护的” 成员。
注意:这仅仅是一种约定,并没有真正的访问限制,外部代码仍然可以访问这些成员。

class MyClass:
    def __init__(self):
        # 受保护的属性
        self._protected_attribute = 42

    def _protected_method(self):
        # 受保护的方法
        return self._protected_attribute

# 创建类的实例
obj = MyClass()

# 可以访问受保护的属性和方法
print(obj._protected_attribute)
print(obj._protected_method())

_protected_attribute 和 _protected_method 前面加了单下划线,按照约定,它们被视为受保护的成员
虽然有这样的约定,但在类的外部仍然可以直接访问这些成员,如代码中通过实例 obj 直接调用了受保护的属性和方法。
这种约定通常用于提醒其他开发者,这些成员是类内部使用的,不建议在外部直接访问,因为它们可能会在未来的版本中发生变化。

双下划线前缀

在类的方法名或属性名前加双下划线 __表示这是一个 “私有” 成员,Python 会对这类成员进行名称修饰(Name Mangling),以避免子类意外覆盖这些成员

class ParentClass:
    def __init__(self):
        # 私有属性
        self.__private_attribute = 10

    def __private_method(self):
        # 私有方法
        return self.__private_attribute

class ChildClass(ParentClass):
    def __init__(self):
        super().__init__()

# 创建子类的实例
child_obj = ChildClass()

# 直接访问私有属性和方法会报错
# print(child_obj.__private_attribute)  # 会引发 AttributeError
# print(child_obj.__private_method())  # 会引发 AttributeError

# 实际上私有成员被重命名了
print(child_obj._ParentClass__private_attribute)
print(child_obj._ParentClass__private_method())

__private_attribute 和 __private_method 前面加了双下划线,它们是私有成员
在类的外部直接访问这些私有成员会引发 AttributeError 异常
Python 对私有成员进行了名称修饰,实际的名称变成了 _类名__成员名的形式,如_ParentClass__private_attribute_ParentClass__private_method,可以通过这种变形后的名称来访问私有成员,但不建议这样做。

双下划线前缀通常用于确保类的内部实现细节不被外部代码或子类意外修改,增强类的封装性

总结

单下划线前缀是一种软性的访问限制约定,而双下划线前缀则提供了更强的封装性,但仍然不是绝对的访问限制

相关文章:

  • vue3的响应式的理解,与普通对象的区别(一)
  • 非docker安装open-webui连接ollama实现deepseek本地使用,集成其他openai模型,常见启动报错问题解决。
  • SpringAI-开启 Java AI 新纪元
  • Twitter 安卓客户端安装包下载
  • Linux——库函数
  • DeepSeek渣机部署编程用的模型,边缘设备部署模型
  • 【云安全】云原生- K8S etcd 未授权访问
  • Day1:强化学习基本概念
  • 2025最新Java面试题大全(整理版)2000+ 面试题附答案详解
  • 【linux】ubunbu切换到root
  • (四)Axure学习图文教程
  • Mybatis-扩展功能
  • 学习资料整合记录
  • 【Kubernetes】k8s 部署指南
  • Copilot基于企业PPT模板生成演示文稿
  • Apache Struts2 - 任意文件上传漏洞 - CVE-2024-53677
  • Linux学习笔记之进程
  • 深度学习笔记——循环神经网络之LSTM
  • 用deepseek学大模型03-数学基础 概率论 随机变量 概率分布
  • 用deepseek学大模型04-模型可视化与数据可视化
  • 中国空间站多项太空实验已取得成果,未来将陆续开展千余项研究
  • 4月译著联合书单|心爱之物:热爱如何联结并塑造我们
  • 厚重与潮流交织,淮安展现“运河之都”全新城市想象
  • 五一假期上海地铁部分线路将延时运营,这些调整请查收
  • A股三大股指小幅低收:电力股大幅调整,两市成交10221亿元
  • 《中国奇谭》首部动画电影《浪浪山小妖怪》定档8月2日