2024.6.9 一

装饰器(Decorators)

装饰器是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,我们在用到装饰器时,常用到一个@的符号,这个叫做语法糖,在函数定义前加上@decorator_name, 那么后面的函数执行之前会跳到装饰器函数那里,先执行装饰器函数的内容.

类的只读属性

我们先来了解一个函数----property() 函数,它可以认为是一个设置能获取、设置和删除对象属性的函数,用法不做介绍

下面介绍@property 语法糖:
被 @property 装饰的方法是获取属性值的方法,被装饰方法的名字会被用做 属性名。

我们在定义类的方法前面加上@property修饰器,此时@property 装饰器会将方法转换为相同名称的只读属性

什么意思呢,就是如果不加装饰器的话,它就是一个正常的函数,要调用必须就要---xx.方法名()---这样才能调用,现在,我们给它加一个装饰器,调用的时候,方法后面添加了(), 那么就会显示错误信息:TypeError: 'int' object is not callable,也就是说添加 @property 后,这个方法就变成了一个属性,我们调用它只需要---xx.方法名---即可

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

这俩需要结合例子说明

python 复制代码
class Student:
    def __init__(self):
        self._nianling = 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
"""
删除属性时执行的代码
"""

我们在定义了age方法后,装饰器把它变成了属性,如果我们不再做任何修改,那么age就是一个只读属性,无法在设置,获取,删除.所以我们为了又途径去操作这个age,就需要用

@方法名.setter和@方法名.deleter来使它可操作,少了获取?直接对象.age就可以获取了,因为它已经被装饰成属性了

WHY

为什么做这种很没用的,多此一举的操作呢?

因为安全,很多时候我们需要设置私有属性,虽然这样保护好了属性,但我们也无法对它操作了,这时,我们就可以用上面的方法将这个私有变量封装起来,对外的接口和操作就是age,但无法直接获取nianling,这样我们就实现了保护和操作两不误.

相关推荐
天天被压力2 小时前
【A股分钟级高频数据完全手册 #09】A股历史分时交易数据接口:普通分时怎么批量下
java·人工智能·python
天天被压力2 小时前
【A股分钟级高频数据完全手册 #10】股票实时行情数据接口Python:公开源实时交易取数
java·人工智能·python
特立独行的猫A11 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
cpolar技术支持12 小时前
「我这边连不上你那个服务」—— 用清单驱动的 TCP 连通性只读看板,cpolar 让远端同事自己取证
python·内网穿透·tcp·cpolar·网络诊断
云和数据.ChenGuang12 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
天诰13 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
benchmark_cc14 小时前
用 QuantDash 读取美股行情:AAPL.US 的运行前检查、排错顺序与数据校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
羲云网络17 小时前
GPT Image 2.6 接入指南:Flare、Sunburst 怎么选,编辑失败如何排查
人工智能·python·aigc·图像生成·acedatacloud
橙橙笔记21 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
小小张说故事21 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python