@property和@x.setter和@x.deleter表示可读可写可删除

@property可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的。
1》只有@property表示只读。
2》同时有@property和@x.setter表示可读可写。

3》同时有@property和@x.setter和@x.deleter表示可读可写可删除。

[python] view plain copy

  1. class student(object):  #新式类
  2. def __init__(self,id):
  3. self.__id=id
  4. @property  #读
  5. def score(self):
  6. return self._score
  7. @score.setter #写
  8. def score(self,value):
  9. if not isinstance(value,int):
  10. raise ValueError(‘score must be an integer!‘)
  11. if value<0 or value>100:
  12. raise ValueError(‘score must between 0 and 100‘)
  13. self._score=value
  14. @property #读(只能读,不能写)
  15. def get_id(self):
  16. return self.__id
  17. s=student(‘123456‘)
  18. s.score=60 #写
  19. print s.score #读
  20. #s.score=-2 #ValueError: score must between 0 and 100
  21. #s.score=32.6 #ValueError: score must be an integer!
  22. s.score=100 #写
  23. print s.score #读
  24. print s.get_id #读(只能读,不可写)
  25. #s.get_id=456 #只能读,不可写:AttributeError: can‘t set attribute

运行结果:
60
100
123456

时间: 2024-10-11 16:51:01

@property和@x.setter和@x.deleter表示可读可写可删除的相关文章

@property与@xxx.setter的用法

类中@property与@xxx.setter的方法介绍. 简单说,@property就是将定义的函数(方法)当作属性对象使用,不需要像调用函数那样去调用,而@xxx.setter是为@xxx的这样函数进行值的设置, 就是可以用@xxx.setter为xxx的函数进行值的更改,在@xxx.setter声明下的函数名字可以不用xxx相同的函数名. # property装饰器# 作用: 将一个get方法转换为对象的属性. 就是 调用方法改为调用对象# 使用条件: 必须和属性名一样 # setter方

property内置装饰器函数和@name.setter、@name.deleter

# property # 内置装饰器函数 只在面向对象中使用 # 装饰后效果:将类的方法伪装成属性 # 被property装饰后的方法,不能带除了self外的任何参数 from math import pi class Circle: def __init__(self, r): self.r = r def perimeter(self): return 2 * pi * self.r def area(self): return pi * self.r**2 * pi c1 = Circle

@property 取代getter setter方法

利用私有属性 class Money(object): def __init__(self): self.__money = 0 def getMoney(self): return self.__money def setMoney(self, value): if isinstance(value, int): self.__money = value else: print("error:不是整型数字") 定义一个property属性 class Money(object): d

装饰器@property与@xxx.setter

class Student(): def __init__(self,name,score): self.__name = name self.__score = score @property def name(self): return self.__name @name.setter def name(self,name): self.__name = name s1 = Student('zhang',25) print(s1.name)               #s1.name就相

Python的property _getter和setter方法【转】

当给属性赋值的时候,使用实例.属性=属性值的方式显然把属性暴露出来了,并且也无法对属性值进行限制检查,java中提供了setter和getter方法,那么python是如何做的呢?更多内容请参考:Python学习指南 属性赋值方法 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 上面的赋值显然不符合实际情况,为了限制score的范围,可以通过一个set_score()方法来设置成绩

python使用@property @x.setter @x.deleter

@property可以将python定义的函数"当做"属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的. 1>只有@property表示只读. 2>同时有@property和@x.setter表示可读可写. 3>同时有@property和@x.setter和@x.deleter表示可读可写可删除. class student(object): #新式类 def __init__(self,id): self.__id=id @pro

Python面向对象 | 类属性

property property是一个装饰器函数,可以将一个方法伪装成属性,调用的时候可以不用加().@property被装饰的方法,是不能传参数的,因为它伪装成属性了. 装饰器的使用:在要装饰的函数.方法.类上面一行加上 @装饰器名字 装饰器的分类: 装饰函数 装饰方法:property 装饰类 例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解) 成人的BMI数值: 过轻:低于18.5 正常:18.5-23.9 过重:24-27

python 装饰器语法糖(@classmethod @staticmethod @property @name.)原理剖析和运用场景

引用:http://blog.csdn.net/slvher/article/details/42497781 这篇文章系统的介绍这几者之间的关系和区别.有兴趣的朋友可以到上面的链接查看原文,这里我把原文拷贝如下(如有侵权,通知马上删除) ==================================================================== 在阅读一些开源Python库的源码时,经常会看到在某个类的成员函数前,有类似于@staticmethod或@classme

python学习第六课 --面向对象

面向对象 class Person(object): --类 def __init__(self,name): --初始化函数 构造方法 self.name = name -- print '---create :',name def say_name(self): --方法 print 'my name is %s' %self.name p1 = Person('gf1')        --实例化 p2 = Person('gf2') p1.say_name()   --person.sa