Python高级入门01-property

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未定义











posted @ 2017-05-22 10:46  指针怒草内存栈  阅读(189)  评论(0编辑  收藏  举报