Python中的单下划线和双下划线开头的变量都可以表示私有变量,事实上,双下划线开头的私有变量(如__var
)会自动修改为单下划线开头的变量(_Classname_var
)。那么问题来了,我们在开发的时候,应该使用双下划线还是单下划线?有没有一个约定成俗的习惯?
我用搜索引擎查了这个问题,奈何英语不好,关键字没写好,没有找到答案,虽然偶尔用Python,但是没有在项目里大规模使用过,也没有接触过使用Python的其它同事,不知道这块儿的惯例,特来请教园友,谢谢。
双下划线一般再类里面使用,对类里面的变量进行封装,类中的方法也同理
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
你应该能看懂
单下划线的话只是定义一个私有变量,双下划线则变成包含类名变量,需要用类名来调用
比如:_name 可以直接 对象._name
__name 则需加类名(比如class a) 对象._a_name
如果你将第二个变量设成_a_name,则跟__name一样,具体的看你自己的使用习惯