私有变量和保护变量
(1)_xxx
"单下划线 " 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量,需通过类提供的接口进行访问;不能用’from module import *'导入
(2)__xxx
类中的私有变量/方法名 (python使用一种 name mangling 技术,将 __membername替换成_classname__membername,也就是说,类的内部定义中,
所有以双下划线开始的名字都被"翻译"成前面加上单下划线和类名的形式。),
" 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
(3) __xxx__
系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 __init()__
代表类的构造函数。
访问保护变量
class A(object):
def __init__(self, num=123, gender=1):
self.__num = num
self._gender = gender
if __name__ == '__main__':
a = A()
print("访问保护变量", a._gender)
通过接口访问
class A(object):
def __init__(self, num=123, gender=1):
self.__num = num
self._gender = gender
@property
def gender(self):
"""
获取保护变量
:return: 保护变量
"""
return self._gender
@gender.setter
def gender(self, gen):
"""
设置保护变量
:param gen:
:return:
"""
self._gender = gen
if __name__ == '__main__':
a = A()
print("通过接口访问保护变量", a.gender)
a.gender = 0
print("通过接口修改后的保护变量", a.gender)
访问私有变量
class A(object):
def __init__(self, name='xiaowang'):
self.__name = name
if __name__ == '__main__':
a = A()
print("访问私有变量:", a._A__name)