ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python之下划线的命名规则以及作用

2022-01-17 10:03:49  阅读:99  来源: 互联网

标签:__ 下划线 python self private var 命名 变量名


前言

1、前后各有两个下划线,说明是类的内置方法,用于操作符重载等用途,自己写的函数避免使用前后两个下划线。

【变量名__xxx__对Python来说有特殊含义,像__self__,__class___,代表自身等,系统定义的,有特殊含义的,你可以覆盖它,在里面写一些自定义初始化的一些东西】

2、前面有两个下划线,表示伪私有方法,不能在类外用原始名字直接调用。

3、前面一个下划线,表示自己写的特殊用途的方法。

作用

①单下划线用于python解释器,表示上一次的执行结果

即使不把 Python 用于编程,也可以把它用作智能计算器,下划线保存上次的计算结果,在计算时相当方便:

②代码中一个独立的下划线,表示这个变量不重要

一个独立的下划线,它也是一个变量名;只不过它比较特殊,当你使用下划线作为变量名时,就代表你告诉大家,这个变量不重要,仅仅占个位置,可以忽略,后面不会再使用它。

当然了,这只是一种约定俗成,你要是不遵守也是可以的,毕竟在后面还可以通过下划线来获取这个变量的值。

例如:

for i, _ in [(1, 2), (3, 4)]:
    print(i)

上面的代码表示我们只需要列表内部元组的第一个,第二个其实赋值给了下划线,虽然后面你可以通过下滑线来取到值,但是强烈建议你不要这么做,这违反了约定。

③类的内部,双下划线作为变量名或函数名的开头,表示私有

私有变量或函数,只能在类的内部来使用,不可在外部访问或更改;

比如,在 module_b.py 中有一个类 A,类 A 有一个双下划线开头的变量名:

class A:
    __private_var = 1000

    def __init__(self) -> None:
        self.__private_var2 = 2000
        self.var3 = 3000

当我们在另一个文件中引用 A 时,就无法访问到私有变量:

import module_b

if __name__ == '__main__':
    a = module_b.A()
    print(a.__private_var)

报错:

当然了,如果你一定要访问,也是可以的,只需在私有变量前加个 _类名 ,比如上面的代码中改为 print(a._A__private_var) 就可以正确打印1000。

例如:

class A:
    __private_var = 1000

    def __init__(self) -> None:
        self.__private_var2 = 2000
        self.var3 = 3000


if __name__ == '__main__':
    a = A()
    print(a._A__private_var) # 1000

不能直接访问 __private_var  是因为 Python 解释器对外把 __private_var  变量改成了 _A__private_var :

有些时候,你会看到以一个下划线开头的实例变量名,比如 _name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

Python 本身没有任何机制阻止你干坏事,一切全靠自觉。

④双下划线开头和结尾的方法,是魔术方法

比如常见的  __init__ ,  __dict__ ,  __dir__ ,  __doc__ ,  __eq__  等等。

具体可以阅读如何写出令人惊叹的Python类

⑤作为变量名中间的一部分

相比驼峰命名,这叫做蛇形命名,比如user_name。

⑥作为数字中间的一部分,更易读

print(10_000_000)  # 10000000

print(1_280_500_000 == 1280500000)  # True

 

标签:__,下划线,python,self,private,var,命名,变量名
来源: https://www.cnblogs.com/hls-code/p/15812273.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有