Python 下划线变量定义

本文探讨了Python中单下划线、双下划线变量的使用规则和含义。单下划线表示的是名义上的私有变量,虽然可外部访问但不推荐。双下划线则创建真正私有的变量,外部无法直接访问,但可通过特定方法绕过。此外,双下划线开头的名称常用于系统保留的方法,避免与用户定义的名称冲突。

1.单下划线

变量前的单下划线表示表面上私有 ,但是其实这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

2.双下划线

变量前的双下划线表示真正的私有,实际上的私有,只有内部可以访问,外部不能访问 

但是有窍门,可以在类里面增加get__namededeset__namedede这样的方法来突破限制,而且还能在方法里做验证。

3.其他(如:init):

名称前后的双下划线是一种惯例,对Python系统来说,这将确保不会与用户自定义的名称冲突。通常,你将会覆写这些方法,并在里面实现你所需要的功能,以便Python调用它们。例如,当定义一个类时,你经常会覆写“init”方法

总结:

前面单下划线_var变量所在模块/类以外的地方也能访问该变量,但最好不要
前面双下划线__privateVar变量所在模块/类以外的地方不能访问该变量,这是私有变量
前后双下划线如__name__和__init__Python内置特殊变量,哪儿都可以访问

示例:

class MyName:
    _name = "WinerChan111"  # 伪私有变量
    __namedede = "WinerChan222" # 真正私有变量,但是增加get__namedede和set__namedede实例方法可访问
  def get_namedede(self):     return self.__namedede   def set_namedede(self,s):    self.__namedede = s
print(MyName._name)
print(MyName.__namedede)

#############输出#######################
>>> 
>>> class MyName:
...     _name = "w1"
...     __namedede = "w2"
... 
>>> print(MyName._name)
w1
>>> print(MyName.__namedede)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'MyName' has no attribute '__namedede'
>>>
class MyName:
    _name = "WinerChan111"  # 伪私有变量
    __namedede = "WinerChan222" # 真正私有变量,但是增加get__namedede和set__namedede实例方法可访问
  def get_namedede(self):     return self.__namedede   def set_namedede(self,s):    self.__namedede = s
print(MyName._name)
print(MyName.__namedede)
###########输出###########
>>> 
>>> 
>>> print(MyName._name)
w1
>>> r = MyName()
>>> print(r.get_namedede())
w2
>>> name = "w3"
>>> r.set_namedede(name)
>>> r.get_namedede()
'w3'
>>> 
>>>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值