python中的property注解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
本文出自 “matengbing” 博客,请务必保留此出处http://matengbing.blog.51cto.com/11395502/1905757
以上是关于python中的property注解的主要内容,如果未能解决你的问题,请参考以下文章
@Schedule注解中的Cron表达式读取properties的方法
spring in action 学习十二:property placeholder 注解的方式实现避免注入外部属性硬代码化
Failed to convert property value of type ‘java.lang.String‘ to required type ‘int‘ for property(代码片段