Python 使用@property
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 使用@property相关的知识,希望对你有一定的参考价值。
1 背景
C#中提供了属性Property这个概念,让我们在对私有成员赋值、获取时更加方便,而不用像C++分别定义set*和get*两个函数,在使用时也就像直接使用变量一样
class C(object):
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
if value > 100:
raise Exception("value > 10")
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I‘m the ‘x‘ property.")
c1 = C()
c1.x = 100
Traceback (most recent call last):
File "C:\string.bak.py", line 63, in <module>
c1.x = 100
File "C:\string.bak.py", line 54, in setx
raise Exception("value > 10")
Exception: value > 10
每个变量都要写 var = property(getx, setx, delx, "") 比较麻烦,有没更便捷的办法,使用@property
2 @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
st = Student()
st.score = "xxx"
把一个getter方法变成属性,只需要加上@property
就可以了,此时,@property
本身又创建了另一个装饰器@score.setter
,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作
Traceback (most recent call last):
File "C:\string.bak.py", line 63, in <module>
c1.x = 100
File "C:\string.bak.py", line 54, in setx
raise Exception("value > 10")
Exception: value > 10
setx(self, value):
if value > 100:
raise Exception("value > 10")
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I‘m the ‘x‘ property.")
c1 = C()
c1.x = 100
以上是关于Python 使用@property的主要内容,如果未能解决你的问题,请参考以下文章
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段