JAVA中存在对变量 私有化,公开,保护。。。
私有化时候,需要提供一个公开的get 和 set方法对外公开,让别人进行调用
python中同样存在 私有化变量定义是__是这个双下划线,eg:__num 类名不能直接调用,
#conding=utf-8 ''' set get 方法 私有化__ ''' class Test(object): def __init__(self): self.__num=100 def setNum(self,setNum): self._num=setNum def getNum(self): return self._num t=Test(); print(t.__num) print(t.getNum()) t.setNum(200) print(t.getNum())
print(t.__num)
其实这个时候在类名进行调用私有化时候,python解释器吧类名称进行修改了,这时候你是不能直接调用到的,
私有化时候提供get和set函数
2。使用定义变量解决私有化调用
''' property第一种用法 ''' class Test(object): def __init__(self): self._num=100; def setNum(self,Nums): print('---set---') self._num=Nums def getNum(self): print('---get---') return self._num num=property(getNum,setNum) t=Test() t.num=520 print(t.num)
当你调用这个num时候,你传入 了值,这时候,这个property会直接调用set方法进行赋值, 当你不传时候,会判断的去调用get方法获取
3.注解获取
''' property第一种用法 ''' class Test(object): def __init__(self): self._num=100; @property def num(self): print('---get---') return self._num @num.setter def num(self,Nums): print('---set---') self._num=Nums t=Test() t.num=520 print(t.num)
这里有一个误区:
1.t.num时候不能带(),这时候已经定义成 了属性了,
2.get方法一定要放在set方法上面不然,就会出现@num.setter未定义