1.单下划线
变量前的单下划线表示表面上私有 ,但是其实这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
2.双下划线
变量前的双下划线表示真正的私有,实际上的私有,只有内部可以访问,外部不能访问
但是有窍门,可以在类里面增加get__namedede和set__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' >>> >>>
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/18119.html