【Python 48小时速成 1】单下划线与双下划线的作用

一、单下划线的使用

在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 = 10  # 私有变量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.mzph.cn/news/755134.shtml

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

相关文章

面试笔记——Redis(使用场景、面临问题、缓存穿透)

Redis的使用场景 Redis(Remote Dictionary Server)是一个内存数据结构存储系统,它以快速、高效的特性闻名,并且它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。它主要用于以下场景: 缓…

java新手练习-类的继承调用(接口,抽象类,构造函数)和枚举定义方法

1.继承 父类可以调用子类实例对象,(对于调用抽象类必须使用继承) 模版 //抽象定义一个父类抽象类 abstract class FatherAbstract{void showFatherAbstract(String color, String name, int age, double serail_abstract){System.out.println("color " color &…

Java基础-lambda表达式

lambda表达式 前言前置知识λ小故事函数式编程起源: λ演算法 概念Lambda && 匿名类无参类型的简写带参函数的简写 简写的依据自定义函数接口lambda && 匿名类JVM层面区别匿名内部类实现Lambda表达式实现推论,this引用的意义 lambda && 集合Collection…

代码随想录阅读笔记-字符串【右旋字符串】

题目 字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。 例如,对于输入字符串 "a…

【STL源码剖析】【2、空间配置器——allocator】

文章目录 1、什么是空间配置器?1.1设计一个简单的空间配置器,JJ::allocator 2、具备次配置力( sub-allocation)的 SGI 空间配置器2.1 什么是次配置力2.2 SGI标准的空间配置器,std::allocator2.2 SGI特殊的空间配置器,std::alloc2.…

录视频的软件推荐,助力视频内容创作

随着网络技术的发展和在线教育的兴起,录制视频教程的需求日益增加。无论是制作教学课程、分享办公技巧,还是录制游戏过程,一款好用的录屏软件都至关重要。本文将深入介绍三款录视频的软件,帮助读者了解它们的特点和操作步骤&#…

OSPF外部路由及外部路由引入过程

OSPF自治域(同运行了OSPF协议的设备);O_ASE——代表OSPF的外部路由(优先级150);1类LSA除了描述本身的直连状态、还描述本身的设备角色。 ASBR——自治系统边界路由器;同种路由协议也可做路由引…

谁能成为OpenAI的现实竞争对手吗?

文 | BFT机器人 前言: 自从与ChatGPT一起出现以来,OpenAI一直主导着人工智能市场,但它仍处于早期阶段。人工智能的历史可以追溯到几十年之前。但2022年11月ChatGPT的发布使生成式人工智能 (GenAI) 成为人们关注的焦点。从那时起,…

从SQL质量管理体系来看SQL审核(2) - SQL质量标准

从SQL质量管理体系来看SQL审核系列将通过多篇文章从SQL质量管理体系的角度来讨论如何设计一个优秀SQL审核引擎。 本系列的第一篇博文介绍了SQL质量管理体系的四个主要组成部分,SQL质量标准确立目标,SQL开发规范指导编码实践,SQL审核工具监督…

Java基础知识总结(6)

String类中常用的类方法: 方法名称描述format(String format, Object... args)使用指定的格式字符串和参数返回一个格式化字符串。 format - 格式字符串 args - 格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数…

汽车研发项目管理数字化平台之阀门管理

阀门管理,在汽车研发流程中占据着举足轻重的地位,是确保项目精细化、系统化的关键所在。这一机制的核心在于通过设立“阀门”来控制和管理研发流程中的关键节点,从而确保项目在质量、进度和资源等方面均符合预期目标。在汽车行业高度竞争和持…

学习网络编程No.14【数据链路层ARP理解】

引言: 北京时间:2024/3/14/9:20,简单聊一聊我的日常。昨天晚上十点左右更新完新的一篇文章,回到宿舍简简单单花了个两首歌的时间洗了个澡,然后为了保持形象吹了个头发,哈哈哈!当然对比以前的我…

Uniapp + SpringBoot 开发微信H5项目 微信公众号授权登录 JAVA后台(一、配置使用微信公众平台测试公众号)

申请测试号进行调试开发,测试号拥有大部分服务号有的接口权限。 一、接口配置信息填写校验 这里需要填写一个URL和一个Token验证字符串 我这里是用了natapp内网穿透 将本地的后台8080端口服务映射到了 http://x7zws8.natappfree.cc https://natapp.cn/在natapp官网…

Linux(Ubuntu)下安装paddleocr详细教程

PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。 1、 Ubuntu安装教程: 首先安装paddlepaddle:pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple 一般此项不会报错…

虚拟交换机简单认识

目录 一、概述 二、工作原理 三、常见的虚拟交换机实现 四、虚拟交换机的工作方式 五、应用场景 六、虚拟交换机作为SDN网络的数据平面 6.1 软件实现的数据平面 6.2 虚拟交换机作为数据平面 6.3 硬件与软件数据平面的结合 6.4 总结 一、概述 虚拟交换机(V…

Redis的安装和部署教程(Windows环境)

一、安装Redis服务 1、下载Redis压缩包 以下这个是我网盘里面的(这个是v8.0版本的,支持导入.rdb数据文件) 链接:百度网盘 请输入提取码 提取码:x0f1 --来自百度网盘超级会员V5的分享 2、解压到文件夹 将下载的压缩…

【书生·浦语大模型实战营】学习笔记2

Lagent:智能体框架,实现将一个大语言模型转化为多种类型的智能体,更好地发挥InternLM的性能 浦语灵笔:视觉语言大模型 InternLM-Chat-7B智能对话Demo 环境准备 使用复制的internlm-demo环境 # 执行该脚本文件来安装项目实验环境…

Apple加速AI大跃进:最新发布的MM1 模型论文

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

四川宏博蓬达法律咨询有限公司:专业引领,法律护航

在这个法治社会中,法律服务已成为企业和个人不可或缺的重要支持。四川宏博蓬达法律咨询有限公司凭借其专业的服务态度和丰富的法律知识,在法律服务领域独树一帜,赢得了社会各界的广泛认可。 一、公司背景实力雄厚 四川宏博蓬达法律咨询有限公…