Python中property和@property的应用
本文最后更新于 2024年9月11日 下午
前言
property
把方法包装成属性,让那个方法以属性的形式被访问和调用,即将class.function()
通过class.function
进行引用,不需要()
1、property()函数
- 语法
property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
- 说明
fget
是获取属性值的方法fset
是设置属性值的方法fdel
是删除属性值的方法doc
是属性描述信息。如果省略,会把 fget 方法的 docstring 拿来用(如果有的话)
1 |
|
2、@property装饰器
这是更为常用的方法 - 被
@property
装饰的方法会被用做==属性名==。该条使用最为广泛。法加入@property后,这个方法相当于一个属性,这个属性可以让用户进行使用,并且在不设置@属性名.setter
和@属性名.deleter
时用户==没有办法随意修改==。 - 被 @属性名.setter
装饰的方法是设置属性值的方法。 - 被 @属性名.deleter
装饰的方法是删除属性值的方法 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29class Student:
def __init__(self):
self._age = None
@property
def age(self):
return self._age
@age.setter
def age(self, age):
self._age = age
@age.deleter
def age(self):
del self._age
student = Student()
# 设置属性
student.age = 18
# 获取属性,即调用时不需要student.age()
print('学生年龄为:' + str(student.age))
"""
输出
学生年龄为:18
"""@属性名.setter
和
@属性名.deleter
,则用户进行属性调用的时候,直接调用age即可。同时用户不知道属性名_age,因此用户无法更改属性,从而保护了类的属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32class Student:
def __init__(self):
self._age = 20
@property
def age(self):
return self._age
student = Student()
# 设置属性
student.age = 18
'''
报错:
property 'age' of 'Student' object has no setter
'''
# 获取属性,
print('学生年龄为:' + str(student.age))
"""
输出
学生年龄为:20
"""
#只有通过内部属性才能更改值,更加安全
student._age = 18
print('学生年龄为:' + str(student.age))
"""
输出
学生年龄为:18
"""
参考
1、Python 中 property() 函数及 @property 装饰器的使用_python中的 property-CSDN博客 2、python @property的介绍与使用 - 知乎 (zhihu.com)