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 提示

python property函数 property python3_python property函数