Property(属性)

一、定义

一个可以使实例方法用起来像实例属性一样的特殊关键字,可以对某个方法,通过使用property属性,能够简化调用者在获取数据的流程,使代码看起来更简明。

使用property装饰的方法在调用时,和属性的调用一样,不需要括号。该方法的定义仅有一个self参数。

实现property有2种方式:装饰器、类属性

二、装饰器

新式类中的属性有三种访问方式:

  • 读取属性
  • 修改属性
  • 删除属性
Class Student:
    #读取属性
    @property
    def score(self):
        return self._score
    #setter方法修改属性
    @score.setter
    def score(self, value):
        self._score = value
    #删除属性
    @score.deleter
    def score(self):
        del self._score
        
        
########## Usage #######
stu = Student()
stu.score  #调用方法名,作为属性
stu.score = 100 
del stu.score

 

三、类属性

当使用类属性的方式创建property属性时,property()方法有四个参数

  • 参数1. 方法名,调用对象.属性时自动触发
  • 参数2. 方法名,调用 对象.属性 = xxx 时自动触发执行方法
  • 参数3. 方法名,调用 del 对象.属性 时自动触发执行方法
  • 参数4. 字符串,调用 对象.属性.doc ,此参数是该属性的描述信息
 1 #########################
 2 Class Student2:
 3     def __init__(self):
 4         self.score = 100
 5         self.factor = 0.6
 6         
 7     def get_score(self):
 8         new_score = self.score * self.factor
 9         return new_score
10         
11     def set_score(self, value):
12         self.score =  value
13         
14     def del_score(self):
15         del self.score
16         
17     score = property(get_score, set_score, del_score, '''This is description of score''')
18     
19 ########## Usage #######
20 stu = Student()
21 stu.score  #调用方法名,作为属性
22 stu.score = 100 
23 del stu.score

 

 

 

 

四、使用property取代getter和setter方法

 1 #####################################
 2 Class Money:
 3     def __init__(self):
 4         self.__money = 0
 5         
 6     # 使用装饰器对money进行装饰,添加一个叫money的属性,调用装饰方法
 7     @property
 8     def money(self):
 9         return self.__money
10         
11     @money.setter
12     def money(self, value):
13         if isinstance(value, int):
14             self.__money = value
15         else:
16             print("Invalid type: value is not int")
17 
18 ####### Usage #######
19 a = Money()
20 a.money = 100
21 print(a.money)

 

 

参考链接:

1. http://www.zzvips.com/article/171641.html

2.Python 提示

原文地址:http://www.cnblogs.com/charles-garden/p/16811290.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性