【Python面向对象进阶】——@property装饰器的用法

简介: 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把属性值随便改.

Python@property属性值的限制

py面向对象进阶.png

在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把属性值随便改
class Person(object):
    pass
    
p = Person()
p.age = 1000
我们可以看到类中的属性被随意修改,很明显不能这样操作,为了限制 age的范围,可以通过一个 set_age()方法来设置成绩,再通过一 个 get_age() 来获取年龄,这样,在 set_score() 方法里,就可以检查参数
# -*- coding: utf-8 -*-
# @author: Flyme awei 
# @Time  : 2022/7/1 20:38

class Person(object):
    # score属性的值 限制范围为:0-88
    def get_age(self):
        return self.__age

    def set_age(self, value):
        if 0 <= value <= 88:
            self.__age = value
        else:
            self.__age = 0  # 给age一个初始值0
            raise ValueError('age的值必须在0-88之间')  # 自动抛异常


if __name__ == '__main__':
    p = Person()

    p.set_age(100)
    p.get_age()
ValueError('age的值必须在0-88之间')
我们发现,当我们设置限定 age的范围的时候,超过对应的范围 set_age设置值时raise方法会自动给我们抛出异常,但是上面的方法太过于复杂,所以引入我们的一个装饰器,装饰器是可以给函数动态加上功能。对于类的方法,装饰器一样起作用。Python内置的 @property 装饰器就是负责把一个方法变成属性调用的
# -*- coding: utf-8 -*-
# @author: Flyme awei 
# @Time  : 2022/7/1 20:38

class Person(object):
    # score属性的值 限制范围为:0-88
    @property  # 把 age 属性暴露出去
    def age(self):
        return self.__age

    @age.setter  # 当前 age 属性可以允许赋值
    def age(self, value):
        if 0 <= value <= 88:
            self.__age = value
        else:
            self.__age = 0  # 给age一个初始值0
            raise ValueError('age的值必须在0-88之间')  # 自动抛异常

    @property
    def name(self):
        self.__name = '张三'
        return self.__name


if __name__ == '__main__':
    p = Person()
    p.age = 18
    print(p.age)  # age属性可以读,可以写

    print(p.name)  # name 只读属性
    
@property 的实现比较复杂,先观察使用。
把一个 getter方法变成属性,只需要加上 @property 就可以了,此时, @property 本身又创建了另一个装饰器 @age.setter ,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作.----
相关文章
|
2天前
|
测试技术 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【9月更文挑战第14天】在编程世界中,我们总是寻找使代码更简洁、更强大的方法。Python的装饰器正是这样一项工具,它允许我们在不修改原有函数代码的情况下,增加额外的功能。本文将通过实际示例,引导你理解装饰器的基本概念,展示如何创建和应用它们,以及如何利用装饰器简化日常编程任务。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和技巧,让你的代码更加高效和优雅。
18 12
|
2天前
|
人工智能 数据挖掘 开发者
Python用法
Python用法
17 10
|
3天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【9月更文挑战第13天】本文深入探讨了Python中一个强大而常被误解的特性——装饰器。我们将从基础概念入手,逐步揭示其背后的原理,并通过实际示例展示如何利用装饰器来简化代码和扩展函数功能。文章不仅为初学者提供了清晰的入门指南,还为有经验的开发者展示了高级用法,旨在帮助读者更好地理解和运用装饰器,以提升编码效率和程序的可维护性。
24 10
|
1天前
|
Python
探索Python中的装饰器:从基础到进阶
【9月更文挑战第15天】本文旨在通过深入浅出的方式介绍Python中装饰器的概念、用法及其背后的原理。我们将从装饰器的简单定义开始,逐步深入到如何自定义装饰器,并探讨其在不同场景下的应用。文章不仅包含理论知识,还提供了实际代码示例,帮助读者更好地理解和掌握这一强大的工具。
|
1天前
|
API Python
探索Python中的装饰器
【9月更文挑战第15天】本文将带你深入了解Python装饰器的概念、用法和实现,让你对这一强大而灵活的工具有更全面的认识。我们将从基础概念出发,逐步深入到高级应用,通过实例代码演示如何利用装饰器优化代码结构、增强函数功能以及管理API版本。
28 15
|
1天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【9月更文挑战第15天】本文将深入探讨Python中一个强大但常被误解的特性——装饰器。我们将从基础概念出发,逐步揭示装饰器如何简化代码结构,增加函数功能而无需修改其核心逻辑。通过具体示例,你将学会如何创建自定义装饰器,以及如何利用它们来管理权限、记录日志等。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇提高代码效率和可维护性的新窗口。
|
2天前
|
测试技术 Python
探索Python中的装饰器魔法
【8月更文挑战第46天】本文将带你走进Python的装饰器世界,通过浅显易懂的方式解锁装饰器的神秘面纱。我们将一起学习如何用装饰器增强函数功能、管理代码和提高效率,同时提供实用的代码示例。准备好了吗?让我们开始这段奇妙的旅程吧!
|
1天前
|
设计模式 缓存 开发者
探索Python中的装饰器:从基础到高级应用
本文旨在引导读者深入理解Python中一种强大但常被误解的特性——装饰器。通过具体示例和实用场景,我们将一窥装饰器的本质,探索它们的工作原理,并学习如何有效地利用装饰器来优化代码结构、增强功能以及实现设计模式。无论是Python初学者还是经验丰富的开发者,都能在本文中找到有价值的洞见和实用的技巧。
7 1
|
3天前
|
测试技术 Python
探索Python中的装饰器:从基础到高级应用
【9月更文挑战第13天】装饰器,在Python编程中扮演着“魔法师”的角色,它们能够增强或修改函数和类的功能,而无需通过继承或更改其源代码。本文将引导你了解装饰器的概念、原理及如何实现自定义装饰器,进而掌握这一强大工具以提升代码的可重用性和简洁性。我们将从装饰器的基础用法出发,逐步深入到更复杂的应用场景,包括带有参数的装饰器和装饰器堆栈。文章旨在提供实用的知识,帮助读者在编程实践中灵活运用装饰器技术。
10 2
|
2天前
|
存储 缓存 监控
探索Python中的装饰器:从基础到高级应用
在本文中,我们将深入探讨Python装饰器的概念,从其基本定义入手,逐步解析其工作机制,并展示如何在实际编程中有效利用装饰器。通过具体示例和实践技巧,本文旨在帮助读者不仅理解装饰器的语法结构,还能掌握如何设计和实现自定义装饰器,从而编写出更加高效、模块化和可维护的代码。
8 0