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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。