python3 - property的使用

传统的绑定属性值,会把属性暴露出去,而且无法检查参数是否合法,如下:

class Test(object):

  def  __int__(self,age):

    self.age = age

 

为了检查参数的合法性,可以设置一个get_age()方法,和一个set_age()方法,如下:

class Test(object):

  def get_age(self):

    return self.__age

  def set_age(self,value):

    if not instance(value,int):

      raise ValueError('age must be an integer...')

    if value <0 or value > 130:

      rasie ValueError('age must between 0~130')

    self.__age = value

但是,上面的例子,调用方法又时略显复杂,没有直接用属性这么直接简单。

 

python内置的@protery装饰器可以把一个方法变成属性来调用。

class Test(object):

  @property

  def  age(self):

    return self.__age

  @age.setter

  def age(self,value):

    if not instance(value,int):

      raise ValueError('age must be an integer...')

    if value <0 or value > 130:

      rasie ValueError('age must between 0~130')

    self.__age = value

s = Test()
s.age = 100
print(s.age)

把一个getter方法变成属性,只需要加上@property就可以,同时,@property本身又创建了另一个装饰器@age.setter,负责把一个setter方法变成属性赋值,这样,我们就拥有一个可控的属性操作了。

posted @ 2017-08-21 10:51  猪快跑  阅读(199)  评论(0编辑  收藏  举报