首页 新闻 搜索 专区 学院

Python中的私有变量用单下划线开头还是用双下划线开头?

0
[已解决问题] 解决于 2019-10-24 13:37

Python中的单下划线和双下划线开头的变量都可以表示私有变量,事实上,双下划线开头的私有变量(如__var)会自动修改为单下划线开头的变量(_Classname_var)。那么问题来了,我们在开发的时候,应该使用双下划线还是单下划线?有没有一个约定成俗的习惯?

我用搜索引擎查了这个问题,奈何英语不好,关键字没写好,没有找到答案,虽然偶尔用Python,但是没有在项目里大规模使用过,也没有接触过使用Python的其它同事,不知道这块儿的惯例,特来请教园友,谢谢。

20
会长的主页 会长 | 大侠五级 | 园豆:9116
提问于:2019-10-24 10:16
< >
分享
最佳答案
0

双下划线一般再类里面使用,对类里面的变量进行封装,类中的方法也同理

class A:
  def __init__(self):
       self.__a= '111'

a = A()
#a你就没法.出他的__a属性,硬是要获得只能a._A__a
但是类内你就可以__a获得他的属性

_xx:单前置下划线,私有化属性或方法,类对象和子类可以访问,from somemodule import *禁止导入
__xx:双前置下划线,私有化属性或方法,无法在外部直接访问(名字重整所以访问不到)

#__x主要是针对类,不是类你毫无意义
#_x主要针对导入

导入我给你举个例子好了
aaa.py

def _a():
    print('fuck')

1.py

from aaa  import *
_a()
#NameError: name '_a' is not defined

2.py

from aaa  import _a
_a()
#funck

你应该能看懂

奖励园豆:5
小小咸鱼YwY | 小虾三级 |园豆:1838 | 2019-10-24 11:07
其他回答(1)
0

单下划线的话只是定义一个私有变量,双下划线则变成包含类名变量,需要用类名来调用
比如:_name 可以直接 对象._name
__name 则需加类名(比如class a) 对象._a_name
如果你将第二个变量设成_a_name,则跟__name一样,具体的看你自己的使用习惯

胜者万里也称王 | 园豆:247 (菜鸟二级) | 2019-10-24 11:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册