当前位置:实例文章 » Python实例» [文章]Python中的property介绍

Python中的property介绍

发布人:shili8 发布时间:2023-03-10 22:01 阅读次数:19

Python中的property介绍

Python中进行OOP(面向对象程序设计)时,获取、设置和删除对象属性( attribute)的时候,常常需要限制对象属性的设置和获取,比如设置为只读、设置取值范围限制等,从而既能提高保护类的封装性。为此,Python提供了两种实现机制,property() 函数和 @property 装饰器。有关这些称为Python的property(特征、特性)。

【官网介绍中文内置函数 — Python 3.11.2 文档

英文Built-in Functions — Python 3.11.2 documentation 】

关于Python面向对象程序设计可参见https://www.shili8.cn/article/detail_20000398811.html

一、property() 函数

语法:

property(fget=None, fset=None, fdel=None, doc=None)

返回 property attribute

说明:

fget 是获取属性值的方法。

fset 是设置属性值的方法。

fdel 是删除属性值的方法。

doc 是属性描述信息。如果省略,会把 fget 方法的 docstring 拿来用(如果有的话)

下面给出property() 函数示例

class Student:
    def __init__(self):
        self._age = None

    def get_age(self):
        print('获取属性时执行的代码')
        return self._age

    def set_age(self, age):
        print('设置属性时执行的代码')
        self._age = age

    def del_age(self):
        print('删除属性时执行的代码')
        del self._age

    age = property(get_age, set_age, del_age, '学生年龄')


student = Student()
# 注意要用 类名.属性.__doc__ 的形式查看属性的文档字符串
print('查看属性的文档字符串:' + Student.age.__doc__)
"""
查看属性的文档字符串:学生年龄
"""

# 设置属性
student.age = 18
"""
设置属性时执行的代码
"""

# 获取属性
print('学生年龄为:' + str(student.age))
"""
获取属性时执行的代码
学生年龄为:18
"""

# 删除属性
del student.age
"""
删除属性时执行的代码
"""

运行效果:

二、@property 装饰器

提供了比 property() 函数更简洁直观的写法。

被 @property 装饰的方法是获取属性值的方法,被装饰方法的名字会被用做 属性名。

被 @属性名.setter 装饰的方法是设置属性值的方法。

被 @属性名.deleter 装饰的方法是删除属性值的方法。

特别提示:

若省略设置属性值的方法,此时该属性变成只读属性。如果此时仍然设置属性,会抛出异常 AttributeError: can't set attribute。

如果报错 RecursionError: maximum recursion depth exceeded while calling a Python object,很可能是对象属性名和 @property 装饰的方法名重名了,一般会在对象属性名前加一个下划线 _ 避免重名,并且表明这是一个受保护的属性。

下面给出@property 装饰器示例

class Student:
    def __init__(self):
        self._age = None

    @property
    def age(self):
        print('获取属性时执行的代码')
        return self._age

    @age.setter
    def age(self, age):
        print('设置属性时执行的代码')
        self._age = age

    @age.deleter
    def age(self):
        print('删除属性时执行的代码')
        del self._age


student = Student()

# 设置属性
student.age = 18
"""
设置属性时执行的代码
"""

# 获取属性
print('学生年龄为:' + str(student.age))
"""
获取属性时执行的代码
学生年龄为:18
"""

# 删除属性
del student.age
"""
删除属性时执行的代码
"""

运行效果:

附录、进一步了解学习

Python中property属性的用处详解/caseinfo/link/f4189a27dcee45368e1885d6776ff3a0

Python特殊属性property原理及使用方法解析/caseinfo/link/cd4fa97540a848a7b69663015cbdc309

Python的特性(property) /caseinfo/link/cfe9ffe261034c69bf4b41fb296d03fb

Python 从attribute到property详解/caseinfo/link/7951d406b7694cda8d28125c31130ed6

相关标签:

免责声明

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱290110527@qq.com删除。

其他信息

其他资源

Top