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

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

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

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

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

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

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

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

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

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

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

前导单下划线

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

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

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

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

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

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

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

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

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

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

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

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

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

单下划线

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

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

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

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

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

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

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

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

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

单后缀下划线

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

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

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

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

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

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

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

Dunder 方法

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

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

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

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

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

下面是一些常见的 Dunder 方法:iWo28资讯网——每日最新资讯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, ...): 将对象作为函数调用,使得对象实例可调用。

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

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

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

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

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

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

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

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

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

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

前导双下划线

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • vivo TWS Air开箱体验:真轻 臻好听

    vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 服务存储设计模式:Cache-Aside模式

    服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 一篇聊聊Go错误封装机制

    一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 使用LLM插件从命令行访问Llama 2

    使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • 一个注解实现接口幂等,这样才优雅!

    一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 华为将推出盘古数字人大模型 可帮助用户12小时完成数字人生成

    华为将推出盘古数字人大模型 可帮助用户12小时完成数字人生成

    在今日举行的2023年华为云数字文娱AI创新峰会上,华为云全球Marketing与销售服务总裁石冀琳表示,华为云将在后续推出盘古数字人大模型,可帮助用户12小
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
  • 上海举办人工智能大会活动,建设人工智能新高地

    上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top