Python 从入门到实战23(属性property)

        我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

上篇文章我们讨论了类的定义、使用方法的相关知识。今天我们将学习一下类的属性(property)。

        本次要介绍的属性是一种特殊的属性,访问它时将计算它的值。另外,该属性还可以为属性添加安全包含机制。

1、创建用于计算的属性(@property)

在python中,可以通过@property(装饰器)将一个方法转换为属性,以实现用于计算的属性。将方法转换为属性后,可以直接通过方法名来访问方法,无需使用“()”。

使用语法:  @property

            def  methodname(self):

                                   block

参数说明:methodname-----指定方法名,一般小写字母开头,后面作为创建的属性名

          self  -----必要参数,表示类的实例

          block  ---方法体,实现的具体功能。通常以return 语句结束,返回计算结果

举例说明:

#计算长方形类,@property 方法转换为属性用于计算
class Rect_area:
    def __init__(self,long,width):
        self.long = long
        self.width = width
    @property
    def area(self):
        return self.long*self.width
rect1 = Rect_area(5,4)
print("长方形的面积:",rect1.area)

输出结果:20

注意:通过@property 修饰后不能重新赋值,如下会报错:

2、为属性添加保护机制(@property)

在python中,默认情况下,创建的属性或者实例是可以在类体外进行修改的。如果想要限制类体外不可修改。可以将它设置为私有,但将它设置为私有后,在类体外就无法获取它的值。若是想创建一个可以被读取,但不可以被修改的属性,可以使用@property 实现只读属性。

1)设置只读属性

举例说明:

#播放音乐的例子
class MusicPlay:
    def __init__(self,play):
        self.__play = play  #加双下划线表示私有类型属性
    @property
    def play(self):
        return self.__play #返回私有属性的值
musicPlay = MusicPlay("正在播放《青花瓷》")
print("默认:",musicPlay.play)   #获取属性值
musicPlay.play = "正在播放《知心爱人》"

输出结果:

可以看到最后一行编码报错,修改只读属性时报错。

2)只读属性设置setter方法修改

另外,参考上面报错的提示,若想修改,可以设置setter 方法让属性可以修改,

参考例子:

#播放音乐的例子

class MusicPlay:
    music_list=["青花瓷","知心爱人","忘情水"]

    def __init__(self,play):
        self.__play = play  #加双下划线表示私有类型属性
    @property
    def play(self):
        return self.__play #返回私有属性的值
    @play.setter
    def play(self,value):
        if value in MusicPlay.music_list:
            self.__play = "你选择了《"+value+"》,稍后播放"
        else:
            self.__play = "你选择的歌曲不存在"

musicPlay = MusicPlay("青花瓷")
print("正在播放:《",musicPlay.play,"》")   #获取属性值,其中,就是连接字符串
print("你可以从",musicPlay.music_list,"中选择要听的音乐")
musicPlay.play = "忘情水"  #修改属性值
print(musicPlay.play)     #获取修改后的属性值

输出结果参考:

3、删除属性的deleter方法

  和setter 方法类似,当我们需要删除一个属性时,我们会使用deleter 方法。

#播放音乐的例子(黄色阴影部分为删除属性相关操作)
class MusicPlay:
    music_list=["青花瓷","知心爱人","忘情水"]

    def __init__(self,play):
        self.__play = play  #加双下划线表示私有类型属性
    @property
    def play(self):
        return self.__play #返回私有属性的值
    @play.setter
    def play(self,value):
        if value in MusicPlay.music_list:
            self.__play = "你选择了《"+value+"》,稍后播放"
        else:
            self.__play = "你选择的歌曲不存在"
    @play.deleter
    def play(self):
        self.__play =None


musicPlay = MusicPlay("青花瓷")
print("正在播放:《",musicPlay.play,"》")   #获取属性值,其中,就是连接字符串
print("你可以从",musicPlay.music_list,"中选择要听的音乐")
musicPlay.play = "忘情水"  #修改属性值
print(musicPlay.play)     #获取修改后的属性值
del musicPlay.play
print(musicPlay.play)
  #再次获取删除后的属性值:None

输出结果参考:

今天先写学习到这里了,每天进步一点点。明天也要加油啊!

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

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

相关文章

信息安全数学基础(19)同余式的基本概念及一次同余式

一、同余式概念 同余式是数论中的一个基本概念,用于描述两个数在除以某个数时所得的余数相同的情况。具体地,设m是一个正整数,a和b是两个整数,如果a和b除以m的余数相同,则称a和b模m同余,记作a≡b(mod m)。反…

【有啥问啥】OpenAI o1的思考之前训练扩展定律、后训练扩展定律与推理扩展定律:原理与应用详解

OpenAI o1的思考之前训练扩展定律、后训练扩展定律与推理扩展定律:原理与应用详解 随着深度学习技术的不断发展,模型的规模和复杂度也迅速提升。研究人员发现了模型训练和推理过程中性能变化的规律,这些规律为我们提供了优化模型设计与训练的…

基于微信小程序的剧本杀游玩一体化平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的剧…

PyQt / PySide + Pywin32 + ctypes 自定义标题栏窗口 + 完全还原 Windows 原生窗口边框特效项目

项目地址: GitHub - github201014/PyQt-NativeWindow: A class of window include nativeEvent, use PySide or PyQt and Pywin32 and ctypesA class of window include nativeEvent, use PySide or PyQt and Pywin32 and ctypes - github201014/PyQt-NativeWindow…

MyBatis 分批次执行(新增,修改,删除)

import com.google.common.collect.Lists;import java.util.Iterator; import java.util.List; import java.util.function.Consumer;/*** Description mybatis分批插入数据使用* Author WangKun* Date 2024/9/19 11:20* Version*/ public class MyBatisSqlUtils {/*** param d…

4G 网络下资源加载失败?一次运营商封禁 IP 的案例分享

在工作中,网络问题是不可避免的挑战之一。最近,我们在项目中遇到了一起网络资源加载异常的问题:某同事在使用 4G 网络连接公司 VPN 时,云服务的前端资源居然无法加载!通过一系列的排查和分析,我们发现问题的…

DataFrame生成excel后为什么多了一行数字

问题描述 python查询数据生成excel文件,生成的excel多了第一行数字索引,1,2,3,4,5...... 代码: df pd.DataFrame(data)df.to_excel(filename, sheet_name用户信息表, indexFalse) 解决: 原理也很简单,就是设置个参…

高德地图JS API AMap.MouseTool绘制

fang 🤖 作者简介:水煮白菜王 ,一位资深前端劝退师 👻 👀 文章专栏: 高德AMap专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧✍。 感谢支持💕💕&#…

本地搭建我的世界服务器(JAVA)简单记录

网上参考教程挺多的,踩了不少坑,简单记录一下,我做的是一个私人服务器,就是和朋友3、4个人玩。 笨蛋 MC 开服教程 先放一个比较系统和完整的教程,萌新可用,这个教程很详细,我只是记录一下自己的…

【QT】定时器使用

文章目录 关于 Qt 定时器使用的注意细节总结实例-检查工具使用周期时间是否合理UI设计头文件 remind.h源文件 remind.cpp实现效果 关于 Qt 定时器使用的注意细节总结 一、创建与初始化 使用 QTimer 类来创建定时器。可以在构造函数中指定父对象,确保定时器在正确的…

自动化测试常用函数

目录 一、元素的定位 1、cssSelector 2、xpath (1)xpath 语法 1、获取HTML页面所有的节点 2、获取HTML页面指定的节点 3、获取一个节点中的直接子节点 4、获取一个节点的父节点 5、实现节点属性的匹配 6、使用指定索引的方式获取对应的节点内容…

【鸿蒙】HarmonyOS NEXT星河入门到实战8-自定义组件-组件通信

目录 1、模块化语法 1.1 模块化基本认知 1.2 默认导出和导入 1.2.1 在ets下新建tools目录 1.2.2 在tools下新建moduls.ets文件 1.2.3 index.ets 1.3 按需导出和导入 1.4 全部导入 2、自定义组件 -基础 2.1 自定义组件 - 基本使用 2.2 自定义组件 -通用样式 2.2.1 et…

大数据Flink(一百二十二):阿里云Flink MySQL连接器介绍

文章目录 阿里云Flink MySQL连接器介绍 一、特色功能 二、​​​​​​​语法结构 三、​​​​​​​​​​​​​​WITH参数 阿里云Flink MySQL连接器介绍 阿里云提供了MySQL连接器,其作为源表时,扮演的就是flink cdc的角色。 一、特色功能 MySQ…

neo4j导入csv数据

neo4j数据可视化实践 手动输入数据 - 官方democsv数据导入准备数据数据处理导入步骤① 导入疾病表格② 导入药物表格③导入疾病-药物关系表格 爬虫的csv文件 手动输入数据 - 官方demo 点击之后,按照左边10张图中的代码,复制粘贴熟悉语法 效果如下 csv数据…

基于JAVA+SpringBoot+Vue的学生干部管理系统

基于JAVASpringBootVue的学生干部管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈…

【AI视频】Runway:Gen-2 运镜详解

博客主页: [小ᶻZ࿆] 本文专栏: AI视频 | Runway 文章目录 💯前言💯Camera Control(运镜)💯Camera Control功能测试Horizonta(左右平移)Vertical(上下平移&#xff0…

UNION嵌套STRUCT的两种类型

1. STRUCT里面的总长度大于UNION中的最大长度 在UNION类型中,嵌套如STRUCT类型,其中STRUCT的类型还比UNION类型中最大的类型的长度还长的时候,会如何处理呢,看下面示例 程序源码 #include "stdafx.h"typedef unsigned…

103.WEB渗透测试-信息收集-FOFA语法(3)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:102.WEB渗透测试-信息收集-FOFA语法(2) FOFA使用实例 组件框架 …

DAY20信息打点-红蓝队自动化项目资产侦察武器库部署企查产权网络空间

2.自动化-网络空间-AsamF 1.去GitHub上下载项目之后使用CMD打开 2.输入命令AsamF_windows_amd64.exe -v生成配置文件 3.AsamF会在~/.config/asamf/目录下生成config.json文件 C:\Users\Acer\.config\asamf 5.根据文档输入命令去查询所需信息(已经没有用了&#x…

LabVIEW多语言支持优化

遇到的LabVIEW多语言支持问题,特别是德文显示乱码以及系统区域设置导致的异常,可能是由编码问题或区域设置不匹配引起的。以下是一些可能的原因及解决方案: 问题原因: 编码问题:LabVIEW内部使用UTF-8编码,但…