装饰property的两种使用方法

@property的作用

在调用对象方法时可以向调用对象属性一样

如何使用@property

  • 定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数
  • 调用时,无需括号
方法:foo_obj.func()property属性:foo_obj.prop

# 创建类
class Foo:# init 初始化方法def __init__(self):self.num = 100# 创建对象方法@propertydef prop(self):return self.numf = Foo()
# 普通调用方法
# print(f.prop())
"""
100
"""
# 装饰器调用
print(f.prop)
"""
100
"""

@property其他使用方式

  • @xxx.setter
  • @xxx.deleter

作用:在类中可以定义同名的实例方法,不过需要@方法名.装饰器来装饰,可以实现向实例方法中传递参数的操作,@property是用来装饰没有参数的实例方法

class Goods(object):# 初始化方法def __init__(self):# 原价self.org_price = 1000# 设置折扣self.discount = 0.7# 定义获取price的方法@propertydef price(self):return self.org_price * self.discount# 定义设置price的方法@price.setterdef price(self, val):# 设置原价self.org_price = val# 定义删除price的方法@price.deleterdef price(self):print("删除org_price\n")del self.org_priceif __name__ == '__main__':# 创建对象goods = Goods()# 获取价格print(goods.price)# 设置价格goods.price = 500# 获取价格print(goods.price)# 删除价格del goods.price# print(goods.price)"""
700.0
350.0
删除org_price
"""

@property作为类属性

  • 类属性 即:在类中定义值为property对象的类属性

类属性方式,创建值为property对象的类属性

property方法中有个四个参数

  • 第一个参数是方法名,调用 对象.属性 时自动触发执行方法
  • 第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法
  • 第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
  • 第四个参数是字符串,调用 对象.属性.__doc__ ,此参数是该属性的描述信息
class Goods(object):# 初始化方法def __init__(self):self.org_price = 1000self.discount = 0.7# 获取价格def price(self):return self.org_price * self.discount# 设置价格def set_price(self, val):self.org_price = val# 删除价格def del_price(self):print("删除 org_price !")# 第一个参数是 调用BAR 对象时自动触发# 第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法# 第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法# 第四个参数是字符串,调用 对象.属性.__doc__ ,此参数是该属性的描述信息BAR = property(price, set_price, del_price, "这个类使用了property!!")# 创建对象
good = Goods()
# 获取价格  相当于good.price()
print(good.BAR)
# 设置价格  相当于good.set_price(500)
good.BAR = 500
print(good.BAR)
# 删除价格   相当于good.del_price()
del good.BAR
# 获取 文档注释
print(Goods.BAR.__doc__)
"""
700.0
350.0
删除 org_price !
这个类使用了property!!
"""

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/664675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MacOS安装dmg提示已文件已损坏的解决方法

MacOS安装dmg提示已文件已损坏的解决方法 导致原因是应用没有上传到苹果的appstroe,系统限制了安装,破碎提示是苹果的误导小手段 方法 一 App 在macOS Catalina(比较新的系统,例如m1,m2也适用)下提示已损坏…

2024美赛D题完整四小问代码+数据集+22页成品参考论文

D题(文末获取完整版的) 题目三:新控制方法是否会让各利益相关者满意或优于当年实际记录的 水位? 解题思路 问题 3 要求我们理解控制算法对两座控制大坝流出量的敏感性,并利用 2017 年 的数据来验证新控制措施是否能为各方利益相关…

第二代视频换脸工具facefusion

GitHub - facefusion/facefusion: Next generation face swapper and enhancer官方地址 1.环境安装 Windows - FaceFusion Windows Python winget install -e --id Python.Python.3.10 PIP python -m ensurepip --upgrade GIT winget install -e --id Git.Git

【奶奶看了都会】《幻兽帕鲁》云服务器部署教程

在帕鲁的世界,你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活,也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活,也可以为你在工厂工作。你也可以将它们进行售卖,或肢解后食用。 《幻兽帕鲁》官…

halcon中的坐标系相关

一、定义 世界坐标系:真实世界中物体实际位置(三维) 相机坐标系:以镜头光心为原点,光轴为Z轴(三维) 图像物理坐标系:以成像图像中心维原点(二维) 像素坐标系…

题目:有1,2,3,4共四个数字,能组成多少个不相同而且无重复数字的三位数有多少个,都是多少?lua

这是作者的思路, 创建三个表, 第一个数是从四个数遍历, 第二个是数剔除第一个数进行遍历 第三个是剔除第一第二个数遍历 脚本如下 local a{1,2, 3, 4} local b{} local c{} local d{} local function copy(tbl) local ctbl{} for k,v in…

Vue发送Get 和 Post 请求以及获取数据

Vue发送Get 和 Post 请求 注意以下代码是请求处理request.js request.js url:请求服务器路径;value:需要发送给服务器的数据;method:请求方式;options的使用:导出Excel export(data) {return request(‘export’, data, ‘post’, {responseType: ‘blob’ }) } expo…

进程间通信方式

1>内核提供的原始通信方式有三种 1)无名管道 2)有名管道 3)信号 2>System V提供了三种通信方式 4)消息队列 5)共享内存 6)信号量(信号灯集) 3>套接字通信 7)socke…

代码对齐自动缩进排版代码格式化美化代码快捷键ShortcutKeyHotKey

代码对齐自动缩进排版代码格式化美化代码默认快捷键 Eclipse : Ctrl Shift F Ctrl Shift F Ctrl Shift F VsCode : Shift Alt F Shift Alt F Shift Alt F Idea : Ctrl Alt L Ctrl Alt L Ctrl Alt L Visual Studio : Ctrl K F Ctrl K F Ctrl K …

TCP/IP LWIP FPGA 笔记

参考资料: 正点原子 LwIP 之 网络接口 netif(ethernetif.c、netif.c)-CSDN博客 IPv4/IPv6、DHCP、网关、路由_ipv6有网关的概念吗-CSDN博客 TCP/IP TCP/IP 协议中文名为传输控制协议/因特网互联协议,又名网络通讯协议&#xf…

MySQL 安装配置 windows

一、下载 去官网MySQL :: MySQL Downloads 下载社区版 然后根据自己的系统选择 直接下载。 二、安装 点击安装程序 这边看样子缺少东西。 去这边下载 Latest supported Visual C Redistributable downloads | Microsoft Learn 然后再一次安装mysql 三、配置 安装完成后&a…

C++重新入门-C++基本语法

目录 1.C程序结构 2.C 中的分号 & 语句块 3.C 标识符 4.C 关键字 5.C 中的空格 1.C程序结构 C程序结构通常包括以下几个主要部分: 注释(Comments): 注释是用来解释代码的文字,对于程序员而言是非常重要的。在…

记录关于node接收上传文件formData踩的坑

1.vue2使用插件formidable实现接收文件,首先接口不可以使用任何中间件,否则form.parse()方法不执行。 const express require(express) const multipart require(connect-multiparty); const testController require(../controller/testController)/…

WordPress SMTP发信避坑指南

前言 Clip_2024-01-31_19-46-18803285 10.5 KB 目前不少主题已经内置了SMTP发信功能,这是因为WordPress自带的mail()函数发信时基本无法发送。 但是在之前(约2021年末)貌似可以通过WordPress自带的函数发信,并且收信方提示由xxx代…

可以将linux docker容器中的文件拿出来吗?

当然可以。在Linux环境下,可以从Docker容器中将文件拿出来(即复制到宿主机上),或者将宿主机的文件复制到Docker容器中。以下是两种常用方法: 方法1:使用 docker cp 命令 直接从命令行拷贝文件或目录&…

MySQL数据库安全加固方案

数据库版本:MySQL8.0.22 按照本安全加固方案进行的数据库加固,一般安全扫描工具扫描出来几乎无漏洞。 1.2 帐号安全 1.2.1 避免不同用户间共享帐号 参考以下步骤。 A. 创建用户。 mysql>CREATE USER ‘用户名’@‘用户 host’ IDENTIFIED BY ‘密码’; 执行以上命令可以…

Request Response 基础篇

Request & Response 在之前的博客中,初最初见到Request和Response对象,是在Servlet的Service方法的参数中,之前隐性地介绍过Request的作用是获取请求数据。通过获取的数据来进行进一步的逻辑处理,然后通过对Response来进行数…

C# Onnx yolov8 水表读数检测

目录 效果 模型信息 项目 代码 训练数据 下载 C# Onnx yolov8 水表读数检测 效果 模型信息 Model Properties ------------------------- date:2024-01-31T10:18:10.141465 author:Ultralytics task:detect license:AGPL-…

c语言---访问越界之后死循环的原因

目录 死循环的概念环境题目代码运行结果对代码发生情况进行解释对i的地址和arr[12]地址一样的解释注意总结 死循环的概念 简单来说,死循环就是指无法靠自身的控制终止循环,在编程中,则是靠自身控制无法终止的程序。即在某一时刻,…

uniapp基于Android平台的校园生活服务交流论坛系统(二手,失物招领 -跑腿) 小程序hbuiderx

作为一款APP的校园论坛系统,面向的是大多数学者,软件的界面设计简洁清晰,用户可轻松掌握使用技巧。在调查之后,获得用户以下需求: (1)用户注册登录后,可进入系统解锁更多功能&#x…