python下划线开头函数总结示例详解

 更新时间:2025年07月03日 08:56:34   作者:越甲八千  
Python中双下划线__开头的命名有三类,在文中有给详细介绍,合理使用可增强封装性与代码可读性,对python下划线开头函数相关知识感兴趣的朋友一起看看吧

在Python中,以双下划线 __ 开头的函数(或变量)具有特殊的命名含义,主要用于实现类的私有成员、魔法方法(特殊方法)和名称修饰(Name Mangling)机制。下面详细解释这三种情况:

1. 魔法方法(特殊方法)

以双下划线开头并结尾的方法(如 __init____str__)称为魔法方法(Magic Methods)或特殊方法(Special Methods)。这些方法由Python解释器自动调用,用于实现类的内置行为。

常见魔法方法示例

class MyClass:
    def __init__(self, value):  # 构造函数,创建对象时自动调用
        self.value = value
    def __str__(self):  # 对象转字符串时调用(如print())
        return f"MyClass(value={self.value})"
    def __add__(self, other):  # 定义加法操作(如obj1 + obj2)
        return MyClass(self.value + other.value)
    def __len__(self):  # 定义长度(如len(obj))
        return 1

调用示例

a = MyClass(10)
b = MyClass(20)
print(a + b)      # 自动调用 __add__ 和 __str__
print(len(a))     # 自动调用 __len__

2. 私有方法和属性(名称修饰)

以双下划线开头但不以双下划线结尾的方法(如 __private_method)是类的私有成员,通过名称修饰(Name Mangling)机制实现一定程度的访问限制。

名称修饰规则

Python会将类中的 __private_method 重命名为 _类名__private_method,使得该方法在类外部难以直接访问,但并非完全禁止。

示例代码

class MyClass:
    def __public_method(self):
        print("这是公开方法")
    def __private_method(self):
        print("这是私有方法")
    def call_private(self):
        self.__private_method()  # 类内部可以正常调用
obj = MyClass()
obj.__public_method()     # 正常调用
# obj.__private_method()  # 报错:AttributeError
obj._MyClass__private_method()  # 可以访问,但不推荐(违反封装原则)

3. 与单下划线_的区别

  • 单下划线 _method:约定俗成的弱私有成员,仅作为开发者之间的约定,外部仍可访问。
  • 双下划线 __method:通过名称修饰实现的强私有成员,外部访问需通过 _类名__method

示例对比

class MyClass:
    def _single_underscore(self):
        print("单下划线方法")
    def __double_underscore(self):
        print("双下划线方法")
obj = MyClass()
obj._single_underscore()     # 可以正常调用(约定不调用)
obj._MyClass__double_underscore()  # 可以调用(但破坏封装)

4. 使用场景建议

  • 魔法方法:用于实现类的特殊行为,如运算符重载、对象创建和销毁等。
  • 私有方法:用于隐藏类的内部实现细节,避免外部直接调用(但需注意并非绝对安全)。
  • 单下划线:用于模块级的私有成员(导入时 from module import * 不会导入)或内部临时变量。

总结

命名方式含义示例
__method__魔法方法,Python内置行为__init__, __add__
__method私有方法,通过名称修饰实现封装__private_method
_method弱私有,约定不被外部直接访问_helper_method

双下划线命名是Python实现封装和特殊行为的重要机制,合理使用可以提高代码的可读性和可维护性。

到此这篇关于python下划线开头函数总结的文章就介绍到这了,更多相关python下划线开头函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用python matploblib库绘制准确率,损失率折线图

    使用python matploblib库绘制准确率,损失率折线图

    这篇文章主要介绍了使用python matploblib库绘制准确率,损失率折线图,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python 的 scapy库,实现网卡收发包的例子

    python 的 scapy库,实现网卡收发包的例子

    今天小编就为大家分享一篇python 的 scapy库,实现网卡收发包的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python画蝴蝶曲线图的实例

    python画蝴蝶曲线图的实例

    今天小编就为大家分享一篇python画蝴蝶曲线图的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python中的min及返回最小值索引的操作

    Python中的min及返回最小值索引的操作

    这篇文章主要介绍了Python中的min及返回最小值索引的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Python趣味入门教程之循环语句while

    Python趣味入门教程之循环语句while

    这篇文章主要给大家介绍了关于Python趣味入门教程之循环语句while的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python超参数优化的具体方法

    python超参数优化的具体方法

    在本篇文章里小编给大家整理了一篇关于python超参数优化的具体方法,有需要的朋友们可以学习下。
    2021-08-08
  • Python判断有效的数独算法示例

    Python判断有效的数独算法示例

    这篇文章主要介绍了Python判断有效的数独算法,结合实例形式分析了Python针对数独有效性判定的相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • 解决Python报错:PermissionError: [Errno 13] Permission denied: ‘xxx‘

    解决Python报错:PermissionError: [Errno 13] Permis

    PermissionError是Python内置异常的一部分,它在试图访问或修改文件系统中的文件或目录而没有适当权限时发生,具有一定的参考价值,感兴趣的可以了解一下
    2025-05-05
  • Python 的counter()函数解析与示例详解

    Python 的counter()函数解析与示例详解

    在 Python 中, collections 模块提供了 Counter 类,用于计算可迭代对象中元素的数量, Counter 是一个字典的子类,它以元素作为键,以元素出现的次数作为值进行计数,本文给大家介绍Python 的counter()函数,感兴趣的朋友一起看看吧
    2023-08-08
  • Python pandas.replace的用法详解

    Python pandas.replace的用法详解

    在处理数据的时候,很多时候会遇到批量替换的情况,如果一个一个去修改效率过低,也容易出错,replace()是很好的方法,下面这篇文章主要给大家介绍了关于Python pandas.replace用法的相关资料,需要的朋友可以参考下
    2022-06-06

最新评论