python 函数、变量中单下划线和双下划线的区别详解

yizhihongxing

Python 函数、变量中单下划线和双下划线的区别详解

在 Python 中,函数和变量名可以使用单下划线和双下划线来命名,这里详细讲解它们之间的区别。

单下划线

在 Python 中,单下划线 _ 通常用来表示一个变量或函数是私有的,即只能在模块内部使用。

示例:

class MyClass:
    def __init__(self):
        self._private_var = 42

    def _private_method(self):
        print('This is a private method.')

my_class = MyClass()
print(my_class._private_var)  # 这里可以使用单下划线变量
my_class._private_method()  # 这里可以调用单下划线方法

双下划线

在 Python 中,双下划线 __ 用来表示一个变量或函数是私有的,并且 Python 将其重命名,以避免子类和类之外的代码的名称冲突。

示例:

class MyClass:
    def __init__(self):
        self.__private_var = 42

    def __private_method(self):
        print('This is a private method.')

class MyChildClass(MyClass):
    def __init__(self):
        super().__init__()  # 调用父类的初始化方法
        self.__private_var = 999  # 由于父类的 __private_var 已被重命名,这里会创建一个新的私有变量

    def __private_method(self):
        print('This is a child class method.')

my_class = MyClass()
print(dir(my_class))  # 这里查看到 __private_var 和 __private_method 都被 Python 重命名了
print(my_class._MyClass__private_var)  # 这里的访问方式需要使用新的名称
my_class._MyClass__private_method()  # 这里的访问方式需要使用新的名称

my_child_class = MyChildClass()
print(dir(my_child_class))  # 这里查看到 __private_var 和 __private_method 都被 Python 重命名了
print(my_child_class._MyClass__private_var)  # 这里的访问方式需要使用新的名称
my_child_class._MyClass__private_method()  # 这里的访问方式需要使用新的名称

总结

单下划线只是一种编码约定,用于表示一个变量或函数是私有的,但并没有 real privacy,类或模块外的代码仍然可以使用单下划线标记的变量和函数。而双下划线是真正的私有,Python 会将其重命名,以避免名称冲突。

在 Python 中,一般情况下不需要过度使用双下划线私有化变量和函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 函数、变量中单下划线和双下划线的区别详解 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 详解Python PIL Image.draft()方法

    Python PIL库中的Image.draft()方法用于将图像转换为“草稿”模式,并返回该图像。“草稿”格式的图像比原始格式的图像更快,但图像质量较差。该方法可以为图像的处理提供加速,特别是在处理大量图像时。下面是更详细的完整攻略: 什么是 Python PIL Image.draft()方法? Image.draft()方法是Python PIL库中的…

    python-answer 2023年3月25日
    00
  • Python如何实现FTP功能

    Python可以通过内置的ftplib库来实现FTP功能。ftplib是Python标准库中的FTP客户端实现,支持多种传输模式和FTP协议规范。 下面是实现FTP功能的完整攻略: 安装ftplib库 如果你使用的是Python的官方发行版,那么ftplib是内置的,不需要安装额外的第三方库。 如果你使用的是其他Python实现,或者需要使用pyftpdli…

    python 2023年6月3日
    00
  • Python中asyncore的用法实例

    下面是关于“Python中asyncore的用法实例”的完整攻略: 一、asyncore库的介绍 在介绍asyncore的用法之前,先来了解一下asyncore库的概念。asyncore是Python的一个标准库,其目的是为了方便的实现基于事件驱动的网络编程。asyncore是基于SocketServer.py、呈现异步方式的socket支持并发操作。 二、…

    python 2023年5月19日
    00
  • python 如何上传包到pypi

    上传Python包到PyPI是Python开发中非常重要的一步,这意味着开发者可以在全球范围内共享他们的Python包。下面是如何上传Python包到PyPI的完整攻略。 1. 创建项目文件夹 首先,我们需要为Python包创建一个项目文件夹,在项目文件夹中包含以下文件: project_folder ├── README.md ├── LICENSE ├─…

    python 2023年5月14日
    00
  • Python 制作糗事百科爬虫实例

    下面就来详细讲解一下“Python 制作糗事百科爬虫实例”的完整攻略: 1. 爬虫概述 爬虫(Web Crawler)是指互联网上按照一定规则自动抓取网页信息的程序。其核心功能是自动抓取网页,将需要的有用信息提取出来并进行分析处理。 2. 工具准备 Python 3.x(开发语言) requests(网络请求库) BeautifulSoup(HTML 解析器…

    python 2023年6月6日
    00
  • 详解Python设计模式之策略模式

    详解Python设计模式之策略模式 策略模式是什么 策略模式(Strategy Pattern)是一种行为模式,用于以相同的方式处理多个不同的行为。在策略模式中,算法被封装在独立的策略中,这使得它们易于替换、理解和扩展。此模式通过定义算法族、分别封装它们,使它们之间可以互换,此模式让算法的变化独立于使用算法的客户。 以计算器为例,有加法、减法、乘法、除法等操…

    python 2023年6月3日
    00
  • python里使用正则的findall函数的实例详解

    以下是“Python里使用正则的findall函数的实例详解”的完整攻略: 一、问题描述 在Python中,正则表达式是一种用于匹配和处理文本数据的强大工具。re模块是Python中用于处理正则表达式的标准库。其中,findall()函数是re模块中常用的函数之一,用于在字符串中搜索正则表达式,并返回所有匹配的字符串列表。本文将详细讲解Python中使用正则…

    python 2023年5月14日
    00
  • python获取字符串中的email

    在Python中,使用正则表达式可以方便地提取字符串中的email地址。以下是一个详细的攻略,包括基本语法和示例说明。 1. 正则表达式基本语法 在Python中,使用re模块可以方便地使用正则表达式。以下是一个基本的正则表达式示例: import re pattern = r’\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部