当前位置: 首页 > news >正文

2024.6.9 一

装饰器(Decorators)

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

类的只读属性

我们先来了解一个函数----property() 函数,它可以认为是一个设置能获取、设置和删除对象属性的函数,用法不做介绍
下面介绍@property 语法糖:
被 @property 装饰的方法是获取属性值的方法,被装饰方法的名字会被用做 属性名。

我们在定义类的方法前面加上@property修饰器,此时@property 装饰器会将方法转换为相同名称的只读属性
什么意思呢,就是如果不加装饰器的话,它就是一个正常的函数,要调用必须就要—xx.方法名()—这样才能调用,现在,我们给它加一个装饰器,调用的时候,方法后面添加了(), 那么就会显示错误信息:TypeError: ‘int’ object is not callable,也就是说添加 @property 后,这个方法就变成了一个属性,我们调用它只需要—xx.方法名—即可

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

这俩需要结合例子说明

class Student:def __init__(self):self._nianling = None@propertydef age(self):print('获取属性时执行的代码')return self._age@age.setterdef age(self, age):print('设置属性时执行的代码')self._age = age@age.deleterdef age(self):print('删除属性时执行的代码')del self._agestudent = Student()
# 设置属性
student.age = 18
"""
设置属性时执行的代码
"""
# 获取属性
print('学生年龄为:' + str(student.age))
"""
学生年龄为:18
"""
# 删除属性
del student.age
"""
删除属性时执行的代码
"""

我们在定义了age方法后,装饰器把它变成了属性,如果我们不再做任何修改,那么age就是一个只读属性,无法在设置,获取,删除.所以我们为了又途径去操作这个age,就需要用
@方法名.setter和@方法名.deleter来使它可操作,少了获取?直接对象.age就可以获取了,因为它已经被装饰成属性了

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

http://www.lryc.cn/news/367824.html

相关文章:

  • 地图之战争迷雾/地图算法/自动导航(一)
  • 【wiki知识库】06.文档管理页面的添加--前端Vue部分
  • 新电脑必装的7款软件,缺一不可
  • 程序员学习Processing和TouchDesigner视觉编程相关工具
  • gitlabcicd-k8s部署gitlab
  • 浅谈JDBC
  • 【数据结构初阶】--- 顺序表
  • 一个完整的java项目通常包含哪些层次(很全面)
  • 设置电脑定时关机
  • Java 编译报错:找不到符号? 手把手教你排查解决!
  • Gitte的使用(Windows/Linux)
  • c++之旅第十弹——IO流
  • 量化交易:Miniqmt获取可转债数据和交易python代码
  • 测试开发之自动化篇 —— 使用Selenium IDE录制脚本!
  • Django 外键关联数据
  • 开源与新质生产力
  • 如何将 Windows图片查看器的背景颜色改成浅色(灰白色)?
  • k8s-pod参数详解
  • 一些计算机网络面试题
  • transformer - 注意力机制
  • 三端植物大战僵尸杂交版来了
  • np.hstack()和np.vstack()函数解释
  • 【Linux】进程5——进程优先级
  • CNN简介与实现
  • 【AI大模型】Transformers大模型库(五):AutoModel、Model Head及查看模型结构
  • Hadoop yixing(移行),新增表字段,删除表字段,修改存储格式
  • 使用汇编和proteus实现仿真数码管显示电路
  • 【Unity】官方文档学习-光照系统
  • 1731. 每位经理的下属员工数量
  • 特征筛选LASSO回归封装好的代码、数据集和结果