当前位置:首页 > 科技  > 软件

Python 中的单下划线和双下划线

来源: 责编: 时间:2023-11-30 09:28:29 372观看
导读哈喽大家好,我是咸鱼。当我们在学习 Python 的时候,可能会经常遇到单下划线 _ 和双下划线 __ 这两种命名方式。单下划线 _ 和双下划线 __ 不仅仅是只是一种简单的命名习惯,它们在 Python 中有着特殊的含义,对于代码的可

哈喽大家好,我是咸鱼。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

当我们在学习 Python 的时候,可能会经常遇到单下划线 _  和双下划线 __ 这两种命名方式。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

单下划线 _  和双下划线 __ 不仅仅是只是一种简单的命名习惯,它们在 Python 中有着特殊的含义,对于代码的可读性和功能实现有着关键的作用。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

那么今天我们来看一看在 Python 中单下划线和双下划线的用法和意义。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

前导单下划线

mby28资讯网——每日最新资讯28at.com

前导单下划线(Leading Single Underscore)通常用于命名变量、方法和属性,表示这些命名的元素是【私有】的或者说是【内部使用】的。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

这种命名约定并不是严格的语言规则(即非强制性),而是一种约定,告诉开发人员该对象不应该被外部直接访问或修改mby28资讯网——每日最新资讯28at.com

图片图片mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

比如说下面的例子中,_internal_var和_internal_method都以前导单下划线开头,表示它们是类的内部使用。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

而public_method是公共方法,可以在类外部访问。mby28资讯网——每日最新资讯28at.com

图片图片mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

虽然可以在类外部访问前导单下划线命名的变量和方法,但是按照约定,建议只在类内部使用,而避免在类外部直接访问它们。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

单下划线

mby28资讯网——每日最新资讯28at.com

单下划线通常用作一个占位符,用于表示一个不重要的变量名或迭代中的临时变量,即在解构赋值或循环迭代中不需要使用的变量mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

例子一中,_ 用作一个占位符变量,表示在tuple_returning_function()返回的元组中的某个值,但是在解构赋值中没有被使用。mby28资讯网——每日最新资讯28at.com

图片图片mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

例子二中,_ 用作循环迭代中的占位符,因为循环体中不需要使用循环变量的值,只是执行了三次打印操作mby28资讯网——每日最新资讯28at.com

图片图片mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

单后缀下划线

mby28资讯网——每日最新资讯28at.com

单个后缀下划线(Single trailing underscores)通常用于避免与 Python 关键字产生命名冲突。它被用作标识符的后缀,以示与Python关键字有所区别。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

比如说我想使用一个在 Python 中已经是保留关键字的变量名时,比如class、def、type等。为了避免冲突,可以添加后缀下划线。mby28资讯网——每日最新资讯28at.com

图片图片mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

Dunder 方法

mby28资讯网——每日最新资讯28at.com

Dunder 方法指的是以双下划线(__)开头和结尾的特殊方法(也称为魔术方法或特殊方法)。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

这些方法具有特殊的行为,可以在自定义类中重写以改变类的行为。Dunder方法的名称是Python中预定义的,例如__init__、__str__、__repr__等。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

下面是一些常见的 Dunder 方法:mby28资讯网——每日最新资讯28at.com

  1. __init__(self, ...): 初始化方法,在对象实例化时调用,用于初始化对象的属性。
  2. __str__(self): 将对象转换为字符串表示形式,当使用print()函数或str()函数时调用。
  3. __repr__(self): 返回一个包含对象信息的字符串,通常用于开发和调试,可通过repr()函数调用。
  4. __len__(self): 返回对象的长度,通过len()函数调用。
  5. __getitem__(self, key): 获取对象的元素,用于索引操作,例如obj[key]。
  6. __setitem__(self, key, value): 设置对象的元素,用于索引赋值操作,例如obj[key] = value。
  7. __delitem__(self, key): 删除对象的元素,用于索引删除操作,例如del obj[key]。
  8. __call__(self, ...): 将对象作为函数调用,使得对象实例可调用。

mby28资讯网——每日最新资讯28at.com

我们在下面的例子中定义了 __add__  dunder 方法,并创建了两个实例mby28资讯网——每日最新资讯28at.com

图片图片mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

我们定义了一个 Point 类,它有 x、y 两个实例变量以及__add__ 方法和__str__ 方法mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

当我们使用 + 运算符对 Point 的两个实例(p1、p2)求和时,__add__ 会自动调用。它返回一个新 的 Point 对象(p3),其 x 和 y 值是两个原始 Point对象的 x和 y 值的和mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

当使用print()函数时调用自定义的__str__ 方法mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

前导双下划线

mby28资讯网——每日最新资讯28at.com

前导双下划线作为前缀在对象名前使用时,表示这是一个特殊的命名约定,它在类定义中用于创建私有属性或方法。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

当在类中使用双下划线作为前缀时,Python 解释器会自动修改属性名,以避免在子类中发生命名冲突。这个过程被称为名称修饰(name mangling)mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

比如下面这个例子:mby28资讯网——每日最新资讯28at.com

图片图片mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

__private_var属性在类内部被访问,但是在类外部直接访问会导致 AttributeError错误。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

这是因为 Python 对 __private_var 进行了名称修饰,实际名称变成了 obj._MyClass__private_var,这样避免了外部直接访问mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

但是我们可以通过调用类内部方法 get_private_var() 在类外部访问私有属性。mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

通过使用前导双下划线,以确保类的某些属性或方法只能从类本身内部访问。这有助于防止意外修改重要的内部数据,并使代码更加可靠和可维护mby28资讯网——每日最新资讯28at.com

mby28资讯网——每日最新资讯28at.com

但如果你知道修饰后的名称,你仍可以在类外部去访问mby28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-35295-0.htmlPython 中的单下划线和双下划线

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 得物大模型平台,业务效果提升实践

下一篇: 编程必备,解析五种常用的Python设计模式

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • Windows 11发布,微软一改往常对老机型开放的态度

    距离 Windows 11 发布已经过去一周,在过去一周里,很多数码爱好者围绕其对 Android 应用的支持、对老机型的升级问题展开了激烈讨论。与以往不同的是,在这次大
  • 微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
Top