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