zp7412 发表于 2018-8-11 10:17:46

python中的property注解

  装饰器(decorator)可以给函数动态加上功能吗?对于类的方法,装饰器一样起作用。Python内置
  的 @property 装饰器就是负责把一个方法变成属性调用的:
class Student(object):  
@property
  
def score(self):
  
return self._score
  
@score.setter
  
def score(self, value):
  
if not isinstance(value, int):
  
raise ValueError('score must be an integer!')
  
if value < 0 or value > 100:
  
raise ValueError('score must between 0 ~ 100!')
  
self._score = value
  @property 的实现比较复杂,我们先考察如何使用。把一个getter方法变成属性,只需要加上 @property 就可以
  了,此时, @property 本身又创建了另一个装饰器 @score.setter ,负责把一个setter方法变成属性赋值,于是,我
  们就拥有一个可控的属性操作:
>>> s = Student()  
>>> s.score = 60 # OK,实际转化为s.set_score(60)
  
>>> s.score # OK,实际转化为s.get_score()
  
60
  
>>> s.score = 9999
  
Traceback (most recent call last):
  
...
  
ValueError: score must between 0 ~ 100!
  @property ,我们在对实例属性操作的时候,就知道该属性很可能不是直接暴露的,而是通过gett
  er和setter方法来实现的。
  还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性:
class Student(object):  
    @property
  
    def birth(self):
  
      return self._birth
  
    @birth.setter         #设置了set和get方法
  
    def birth(self, value):
  
      self._birth = value
  
    @property            #设置了get方法
  
    def age(self):
  
      return 2014 - self._birth
  
c=Student()
  
c.birth=10;
  
print c.age
D:\chinaUnicom\Chinese\python.exe D:/python/test1/test3.py  
2004
  

  
Process finished with exit code 0
页: [1]
查看完整版本: python中的property注解