Python如何使用@property @x.setter及@x.deleter
@property可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的。
- 只有@property表示只读。
- 同时有@property和@x.setter表示可读可写。
- 同时有@property和@x.setter和@x.deleter表示可读可写可删除。
代码如下
classstudent(object):#新式类
def__init__(self,id):
self.__id=id
@property#读
defscore(self):
returnself._score
@score.setter#写
defscore(self,value):
ifnotisinstance(value,int):
raiseValueError('scoremustbeaninteger!')
ifvalue<0orvalue>100:
raiseValueError('scoremustbetween0and100')
self._score=value
@property#读(只能读,不能写)
defget_id(self):
returnself.__id
s=student('123456')
s.score=60#写
prints.score#读
#s.score=-2#ValueError:scoremustbetween0and100
#s.score=32.6#ValueError:scoremustbeaninteger!
s.score=100#写
prints.score#读
prints.get_id#读(只能读,不可写)
#s.get_id=456#只能读,不可写:AttributeError:can'tsetattribute
运行结果:
60
100
123456
代码
classA(object):#要求继承object def__init__(self): self.__name=None #下面开始定义属性,3个函数的名字要一样! @property#读 defname(self): returnself.__name @name.setter#写 defname(self,value): self.__name=value @name.deleter#删除 defname(self): delself.__name a=A() printa.name#读 a.name='python'#写 printa.name#读 dela.name#删除 #printa.name#a.name已经被删除AttributeError:'A'objecthasnoattribute'_A__name'
结果
None
python
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。