property 装饰器的作用

property 装饰器将方法包装成属性,将私有属性公有化,此属性只能被读取。相当于实现get方法的对象

class People:
def __init__(self, identity_number):
self._identity_number = identity_number @property # 只读
def age(self):
return self._age @age.setter # 写
def age(self, value):
if not isinstance(value, int):
raise ValueError("age must be an integer!")
if value < 0:
raise ValueError("age must more than 0")
self._age = value @age.deleter # 删除
def age(self):
del self._age @property
def get_identity_number(self):
return self._identity_number #In [22]: p = People(123456) #In [23]: p.age = 18 # In [24]: p.age
# Out[24]: 18 # In [25]: del p.age # In [26]: p.age
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-26-3523b116dc0e> in <module>()
----> 1 p.age <ipython-input-21-de21f31a52ce> in age(self)
5 @property # 只读
6 def age(self):
----> 7 return self._age
8
9 @age.setter # 写 AttributeError: 'People' object has no attribute '_age' # In [27]: p.age = 18 # In [28]: p.age = 18.6
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-28-8a03211dcd49> in <module>()
----> 1 p.age = 18.6 <ipython-input-21-de21f31a52ce> in age(self, value)
10 def age(self, value):
11 if not isinstance(value, int):
---> 12 raise ValueError("age must be an integer!")
13 if value < 0:
14 raise ValueError("age must more than 0") ValueError: age must be an integer! # In [29]: p.age = '11'
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-29-b6d20eff2848> in <module>()
----> 1 p.age = '11' <ipython-input-21-de21f31a52ce> in age(self, value)
10 def age(self, value):
11 if not isinstance(value, int):
---> 12 raise ValueError("age must be an integer!")
13 if value < 0:
14 raise ValueError("age must more than 0") ValueError: age must be an integer! # In [30]: p.age = -1
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-30-47db6d5817ed> in <module>()
----> 1 p.age = -1 <ipython-input-21-de21f31a52ce> in age(self, value)
12 raise ValueError("age must be an integer!")
13 if value < 0:
---> 14 raise ValueError("age must more than 0")
15 self._age = value
16 ValueError: age must more than 0 # In [31]:

会把成员函数x转换为getter,相当于做了x = property(); x = x.getter(x_get)

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

参考资料:https://docs.python.org/3/library/functions.html?highlight=property#property

http://blog.willdx.me/web/面向对象进阶.html

最新文章

  1. 创建widget
  2. Skeljs – 用于构建响应式网站的前端开发框架
  3. 01 HTML基础
  4. BizTalk开发系列(四) 深入Map测试
  5. Extjs Form用法详解(适用于Extjs5)
  6. POJ2112 Optimal Milking(最大流)
  7. UEFI双硬盘安装win8.1和Ubuntu14.04
  8. PL/pgSQL RETURNS TABLE 例子
  9. 使用JAVA反射初始化数组(转)
  10. 【Android - 框架】之ORMLite的使用
  11. Java类加载器详解
  12. js基础语法习题补充
  13. Java多线程高并发学习笔记——阻塞队列
  14. Mysql性能优化之覆盖索引
  15. java 构造方法详解
  16. sessionFactory中的openSession和getCurrentSession的一些注意事项
  17. 代码学习-Linux内核网卡收包过程(NAPI)【转】
  18. CSS3 transform 属性
  19. Codeforces 985 D - Sand Fortress
  20. [android] 手机卫士号码归属地查询完成

热门文章

  1. OpenGLES.gpus_ReturnNotPermittedKillClient
  2. IG—金字塔
  3. htons、htonl与字节序大小端
  4. 2018.10.12 NOIP模拟 数据结构(线段树)
  5. asp.net 中长尾链接实现推送 -- comet
  6. 【转】web应用缓慢故障分析
  7. POJ 3686 The Windy&#39;s (最小费用流或最佳完全匹配)
  8. Swift要点:从Objective-C开发者的角度看Swift
  9. 记spring mvc传入List&lt;Object&gt;的一次尝试
  10. (并查集)小希的迷宫 --HDU -- 1272