Python中的下划线使用教程:单下划线、双下划线和头尾双下划线详解

news2025/2/22 7:22:15

 


概要

Python是一种简单、易学、功能强大的编程语言,被广泛应用于各种领域。在Python中,下划线的使用有其特殊的含义和用途。本文将详细介绍Python中的单下划线、双下划线和头尾双下划线的使用教程,帮助读者更好地理解和应用这些特性。


一、单下划线的使用

在Python中,使用单下划线作为变量名的前缀有着特殊的含义。单下划线在Python中被约定为一个“弱内部使用”标记。这意味着变量名以单下划线开头,表示该变量是类的内部使用,不建议在类外部直接访问。例如:

class MyClass:
    def __init__(self):
        self._internal = 0  # 内部变量
        self.public = 1  # 公共变量
    def _internal_method(self):
        pass  # 内部方法
    def public_method(self):
        pass  # 公共方法

在上述代码中,变量_internal和方法_internal_method都以单下划线开头,表示它们是类的内部使用,不建议在类外部直接访问。而变量public和方法public_method则没有下划线,表示它们是公共的,可以在类外部直接访问。

需要注意的是,使用单下划线作为变量名前缀只是一种约定,Python并不会强制限制对这些变量的访问。因此,开发者仍然可以在类外部访问以单下划线开头的变量,但这并不符合约定,也不被推荐。

二、双下划线的使用

在Python中,使用双下划线作为变量名的前缀和后缀有着特殊的含义。双下划线在Python中被约定为一个“名称修饰”标记。这意味着变量名以双下划线开头和结尾,表示这是一个特殊的变量,具有特殊的含义。例如:

class MyClass:
    def __init__(self):
        self.__private = 0  # 私有变量
    def __private_method(self):
        pass  # 私有方法

在上述代码中,变量__private和方法__private_method都以双下划线开头,表示它们是类的私有成员。私有成员只能在类内部被访问,无法在类外部直接访问。例如,以下代码将会报错:​​​​​​​

obj = MyClass()
print(obj.__private)  # 报错,无法直接访问私有变量
obj.__private_method()  # 报错,无法直接调用私有方法

然而,Python并没有像其他编程语言一样严格限制私有成员的访问。实际上,Python通过一种名为“名称修饰”的机制,将双下划线开头的变量名进行了变换。例如,变量__private在类内部被重命名为_MyClass__private,方法__private_method在类内部被重命名为_MyClass__private_method。因此,实际上可以通过这种方式来访问私有成员:​​​​​​​

obj = MyClass()
print(obj._MyClass__private)  # 访问重命名后的私有变量
obj._MyClass__private_method()  # 调用重命名后的私有方法

需要注意的是,虽然可以通过名称修饰的方式访问私有成员,但这并不符合Python的编码规范,也不被推荐。Python鼓励开发者通过约定来限制对私有成员的访问,而不是通过强制限制。

三、头尾双下划线的使用

在Python中,以双下划线开头和结尾的变量名具有特殊的含义,被称为“魔术方法”或“特殊方法”。这些特殊方法用于实现类的特殊行为,例如构造函数、析构函数、字符串表示等。例如:​​​​​​​

class MyClass:
    def __init__(self):
        pass  # 构造函数
    def __del__(self):
        pass  # 析构函数
    def __repr__(self):
        pass  # 字符串表示
    def __str__(self):
        pass  # 字符串表示

在上述代码中,__init__、__del__、__repr__和__str__都是特殊方法,用于实现类的特殊行为。这些特殊方法在特定的时机被自动调用,无需手动调用。

例如,__init__方法是构造函数,用于在对象创建时进行初始化操作。当创建一个类的实例时,构造函数会被自动调用:

obj = MyClass()  # 自动调用构造函数

需要注意的是,特殊方法的名称是由Python预先定义的,无法修改。开发者只需要按照特定的方法名和参数列表来实现特殊方法即可。

结语:

本文详细介绍了Python中的单下划线、双下划线和头尾双下划线的使用教程。单下划线用于表示“弱内部使用”,双下划线用于表示“名称修饰”,头尾双下划线用于表示“特殊方法”。通过了解和应用这些下划线的特性,开发者可以更好地编写Python代码,提高代码的可读性和可维护性。希望本文对读者有所帮助,让你更加深入地理解Python中下划线的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1255415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在Ubuntu系统上安装YApi

简单介绍 YApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护API,YApi还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的…

会声会影2024中文旗舰版配置最低要求及会声会影2024旗舰版新增哪些新功能?

会声会影(Corel VideoStudio)2024旗舰版为加拿大Corel公司发布的一款功能丰富的视频编辑软件。会声会影2024简单易用,具有史无前例的强大功能,拖放式标题、转场、覆叠和滤镜,色彩分级、动态分屏视频和新增强的遮罩创建…

什么是客户自助服务?综合指南献上~

《哈佛商业评论》曾报道过,81%的消费者在找客服之前会自己先去找办法解决。 如今,客户希望得到更快的响应。他们不想排队去等信息。他们想要的只是一个更快、更可靠的自助服务解决方案。作为企业,应该注意到他们的期望。企业需要做的就是通过…

Vite -构建优化 - 分包策略 + 打包压缩

什么是分包策略 分包策略 就是把不会常规更新的文件,单独打包处理。问 :什么是不会常规更新的文件? 答 : 就是基本上不会改的文件,比如我们引入的第三方的依赖包,例如 lodash工具包,这些工具包…

Gee教程2.上下文Context

先来看看Gin框架的简单例子 func main() {engine : gin.Default()engine.GET("/", func(c *gin.Context) {c.String(http.StatusOK, "hello World!")})//监听并启动服务,默认 http://localhost:8080/engine.Run() }//我们自己写的 func main()…

PRD学习

产品经理零基础入门(五)产品需求文档PRD(全16集)_哔哩哔哩_bilibili 1. PRD的2种表现形式 ① RP格式 (1)全局说明 ② 文档格式 2. 交互说明撰写 ① 维度 ② 步骤 ③ 规则 (1)单位…

通达信视频教程的下载地址

百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/12yNV62ROERRzmyqm9u22aQ?pwdgmdx

Leetcode 1727. 具有重排的最大子矩阵

题目要求: 给定一个大小为 m x n 的二进制矩阵,并且允许您以任意顺序重新排列矩阵的列。 对列进行最佳重新排序后,返回矩阵中每个元素都为 1 的最大子矩阵的面积。 输入:矩阵 [[0,0,1],[1,1,1],[1,0,1]] 输出:4 说明…

2017年五一杯数学建模B题自媒体时代的消息传播问题解题全过程文档及程序

2017年五一杯数学建模 B题 自媒体时代的消息传播问题 原题再现 电视剧《人民的名义》中人物侯亮平说:“现在是自媒体时代,任何突发性事件几分钟就传播到全世界。”相对于传统媒体,以互联网技术为基础的自媒体以其信息传播的即时性、交往方式…

x大网校登录接口js逆向分析

网站: import base64 # 解码 result base64.b64decode(aHR0cHM6Ly91c2VyLndhbmd4aWFvLmNuL2xvZ2lu.encode(utf-8)) websiteresult.decode(utf-8) # print(result) print(website)思路: 模拟登录,得到token值,才能对内部数据进行…

【YOLOv5入门】目标检测

【大家好,我是爱干饭的猿,本文重点介绍YOLOv5入门-目标检测的任务、性能指标、yolo算法基本思想、yolov5网络架构图。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇…

利用 LD_PRELOAD 环境变量

文章目录 原理LD_PRELOAD介绍如何上传.so文件 例题 [虎符CTF 2022]ezphp 原理 LD_PRELOAD介绍 LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接…

系列十九、Spring实例化bean的方式

一、概述 所谓实例化bean,大白话讲就是Spring如何把这一个个的普通的Java对象创建为Spring bean的。 二、方式 Spring中实例化bean常用的有以下四种,即: ① 构造器方式; ② 静态工厂方式; ③ 实例工厂方式;…

c语言实现10进制转16进制

代码如下&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int dectohex(int b, char array[]) {char a[17] { "0123456789ABCDEF" };int c[30] { 0 }, i 0, base 16, j 0;while (b){c[i] b % base;b b / base;}j i;for (i--; i >…

steam/csgo搬砖项目真能月入过万吗?到底真的假的

steam/csgo搬砖第三课之如何出售 steam搬砖核心原理是什么&#xff1f;为什么会有差价产生&#xff1f;buff不是更低价吗&#xff1f;很多小白会有这些疑问&#xff01; steam搬砖指的是通过买卖csgo游戏装备赚钱的。 玩过游戏的应该就很清楚&#xff0c;像绝地求生&#xff…

数据结构——带头循环双向链表(List)

1、带头双向循环链表介绍 在上一篇博客中我们提到了链表有三个特性&#xff0c;可以组合成为8种不同类型的链表。单链表是其中比较重要的一种&#xff0c;那么这次我们选择和带头双向循环链表会会面&#xff0c;这样我们就见识过了所有三种特性的呈现。 带头双向循环链表&#…

qt pdf 模块简介

文章目录 1. 技术平台2. Qt pdf 模块3. cmake 使用模块4. 许可证5. 简单示例5.1 CMakeLists.txt5.2 main.cpp 6. 总结 1. 技术平台 项目说明OSwin10 x64Qt6.6compilermsvc2022构建工具cmake 2. Qt pdf 模块 Qt PDF模块包含用于呈现PDF文档的类和函数。 QPdfDocument 类加载P…

Python基础:字符串详解(需补充完善)

1. 字符串定义 在Python中&#xff0c;字符串是一种数据类型&#xff0c;用于表示文本数据。字符串是由字符组成的序列&#xff0c;可以包含字母、数字、符号和空格等字符。在Python中&#xff0c;你可以使用单引号&#xff08;&#xff09;或双引号&#xff08;"&#x…

SpringBoot 拦截器高级篇

Springboot 拦截器 定义使用场景拦截器与过滤器的区别实现步骤全局拦截器的局限性全局拦截器VS局部拦截器局部拦截器自定义局部拦截器使用多个局部拦截器 定义 拦截器是Spring MVC框架中的一个重要组件&#xff0c;它是一种AOP&#xff08;面向切面编程&#xff09;的实现方式&…

汽车租聘管理与推荐系统Python+Django网页界面+协同过滤推荐算法

一、介绍 汽车租聘管理与推荐系统。本系统使用Python作为主要编程语言&#xff0c;前端采用HTML、CSS、BootStrap等技术搭建前端界面&#xff0c;后端采用Django框架处理用户的请求。创新点&#xff1a;使用协同过滤推荐算法实现对当前用户个性化推荐。 其主要功能如下&#x…