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

这篇具有很好参考价值的文章主要介绍了Python 中的单下划线和双下划线。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

哈喽大家好,我是咸鱼

当我们在学习 Python 的时候,可能会经常遇到单下划线 _ 和双下划线 __ 这两种命名方式

单下划线 _ 和双下划线 __ 不仅仅是只是一种简单的命名习惯,它们在 Python 中有着特殊的含义,对于代码的可读性和功能实现有着关键的作用。

那么今天我们来看一看在 Python 中单下划线和双下划线的用法和意义

前导单下划线

前导单下划线(Leading Single Underscore)通常用于命名变量、方法和属性,表示这些命名的元素是【私有】的或者说是【内部使用】的。

这种命名约定并不是严格的语言规则(即非强制性),而是一种约定,告诉开发人员该对象不应该被外部直接访问或修改

_internal_variable = 10

比如说下面的例子中,_internal_var_internal_method都以前导单下划线开头,表示它们是类的内部使用。

public_method是公共方法,可以在类外部访问。

class MyClass:
    def __init__(self):
        self._internal_var = 42  # 前导单下划线表示该变量是内部使用的

    def _internal_method(self):
        return 'This is an internal method'

    def public_method(self):
        # 在公共方法中调用内部方法和变量
        print(self._internal_method())
        print(f'The internal variable is: {self._internal_var}')

虽然可以在类外部访问前导单下划线命名的变量和方法,但是按照约定,建议只在类内部使用,而避免在类外部直接访问它们。

单下划线

单下划线通常用作一个占位符,用于表示一个不重要的变量名或迭代中的临时变量,即在解构赋值或循环迭代中不需要使用的变量

例子一中,_ 用作一个占位符变量,表示在tuple_returning_function()返回的元组中的某个值,但是在解构赋值中没有被使用。

def tuple_returning_function():
    return (1,1), (2,2), (3,3)

_ , tuple_I_need, _ = tuple_returning_function()

例子二中,_ 用作循环迭代中的占位符,因为循环体中不需要使用循环变量的值,只是执行了三次打印操作

for _ in range(0,3):
  print("打印三次")

单尾随下划线

单个后缀下划线(Single trailing underscores)通常用于避免与 Python 关键字产生命名冲突。它被用作标识符的后缀,以示与Python关键字有所区别。

比如说我想使用一个在 Python 中已经是保留关键字的变量名时,比如class、def、type等。为了避免冲突,可以添加后缀下划线

class_ = "Computer Science"
type_ = “字符串”

Dunder 方法

Dunder 方法指的是以双下划线(__)开头和结尾的特殊方法(也称为魔术方法或特殊方法)。

这些方法具有特殊的行为,可以在自定义类中重写以改变类的行为。Dunder方法的名称是Python中预定义的,例如__init____str____repr__等。

下面是一些常见的 Dunder 方法:

  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, ...): 将对象作为函数调用,使得对象实例可调用。

我们在下面的例子中定义了 __add__ dunder 方法,并创建了两个实例

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)

    def __str__(self):
        return f"({self.x}, {self.y})"
p1 = Point(1, 2)
p2 = Point(3, 4)
p3 = p1 + p2
print(p3)  # Output: (4, 6)

我们定义了一个 Point 类,它有 xy 两个实例变量以及__add__ 方法和__str__ 方法

当我们使用 + 运算符对 Point 的两个实例(p1、p2)求和时,__add__ 会自动调用。它返回一个新 的 Point 对象(p3),其 xy 值是两个原始 Point对象的 xy 值的和

当使用print()函数时调用自定义的__str__ 方法

前导双下划线

前导双下划线作为前缀在对象名前使用时,表示这是一个特殊的命名约定,它在类定义中用于创建私有属性或方法。

当在类中使用双下划线作为前缀时,Python 解释器会自动修改属性名,以避免在子类中发生命名冲突。这个过程被称为名称修饰(name mangling)

比如下面这个例子:

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

    def get_private_var(self):
        return self.__private_var

# 创建类的实例
obj = MyClass()

# 尝试访问私有属性
print(obj.__private_var)  # 会抛出 AttributeError 错误,因为这个属性名称已被修改

# 通过调用访问私有属性的方法来获取
print(obj.get_private_var())  # 输出: 10

__private_var属性在类内部被访问,但是在类外部直接访问会导致 AttributeError 错误。

这是因为 Python 对 __private_var 进行了名称修饰,实际名称变成了 obj._MyClass__private_var,这样避免了外部直接访问

但是我们可以通过调用类内部方法 get_private_var() 在类外部访问私有属性。

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

但如果你知道修饰后的名称,你仍可以在类外部去访问文章来源地址https://www.toymoban.com/news/detail-747836.html

到了这里,关于Python 中的单下划线和双下划线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • css下划线跟随导航

    2024年01月23日
    浏览(30)
  • a标签设置下划线动画

     

    2024年02月07日
    浏览(32)
  • python 面向对象编程的特点 - 封装 - 继承(经典类、新式类) - 多态 - 静态方法、类方法 - 下划线的使用 - 回合制攻击游戏实验

    目录 面向对象编程的特点: 封装:封装是将数据和操作(方法)封装在一个对象中的能力 继承:继承是指一个类(子类)可以继承另一个类(父类)的属性和方法。 我们为什么需要继承呢? 父类/基类 = ATM 子类/派生类= ChinaATM/ICBCATM ATM系统父类子类讲解代码: 经典类和新式

    2024年02月15日
    浏览(35)
  • React Native文本添加下划线

    2024年02月13日
    浏览(27)
  • Java实现驼峰、下划线互转

    Java实现驼峰、下划线互转 1.使用 Guava 实现 先引入相关依赖 1.2 下划线转驼峰 2.自定义代码转 2.1驼峰转下划线 2.2下划线转驼峰

    2024年02月12日
    浏览(28)
  • 电脑下划线在键盘上怎么打出来

    电脑下划线在键盘上怎么打出来, 可能很多人在打字的过程中都不知道如何在键盘上输入下划线的符号,本期内容就和大家详细介绍一些电脑打出下划线的方法吧。 1、电脑大键盘。大键盘区域找到右上角有个 - 线就是中横线,使用shift+- 即可输入下划线。 2、注意下划线输入

    2024年02月07日
    浏览(28)
  • 【CSS】鼠标(移入/移出)平滑(显示/隐藏)下划线

    鼠标移入内容时,下划线从 左 开始绘制到 右 侧结束 鼠标移出内容时,下划线从 左 开始擦除到 右 侧结束 我们给内容添加一个黑色背景 background: #000; 示例 效果 将黑色背景 background: #000; 替换成彩色渐变背景 background: linear-gradient(to right,#ec695c,#61c454); 示例 效果 宽度设置100个

    2024年02月09日
    浏览(39)
  • echarts 饼图 环形图 lable添加下划线

         

    2024年02月09日
    浏览(33)
  • 一个CSS渐变下划线效果的实用技巧

    下划线它只用到了CSS的渐变背景、背景大小调整、位置设置、鼠标hover 过渡等基本属性和技巧。 我们先看一下基本的结构。 然后我们给span 元素添加一个线性渐变背景。 你会发现行盒的背景是可以跟随文字换行的。 我们再来改变一下背景图的大小。 背景图重复了,我们将背

    2024年02月14日
    浏览(27)
  • 使用CSS实现鼠标悬浮标题出现动态下划线

    今天来实现下面图片的效果     要实现这种效果只需要使用到background这个属性了。 首先创建有个div 输入一段文字 然后在设置background属性  这时候页面就会出现这样子  文字背景填充满了,无法跟动态图一样那么细。别急,css里还有有个background-size属性,设置一下就可以了

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包