python中两种getter和setter方法

2023-11-17

当给属性赋值的时候,使用实例.属性=属性值的方式显然把属性暴露出来了,并且也无法对属性值进行限制检查,java中提供了setter和getter方法,那么python是如何做的呢?

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

s = Student()
s.score = 9999

上面的赋值显然不符合实际情况,为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数:

第一种getter和setter方法:

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.__score = score
    def get_score(self):
        return self.__score
    def set_score(self,score):
        if not isinstance(score,int):
            raise ValueError('score must be an Integer')
        if score < 0 or score > 100:
            raise ValueError('score must between 0 ~ 100!')
        self.__score = score
s = Student('张三',59)
s.set_score(60)
print(s.get_score())
# s.set_score(9999)
# print(s.get_score())
# s.setScore('60')
# print(s.getScore())



第二种getter和setter方法:

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.__score = score
    @property
    def score(self):
        return self.__score
    @score.setter
    def score(self,score):
        if not isinstance(score,int):
            raise ValueError('score must be a Integer')
        if score < 0 or score > 100:
            raise ValueError('score must between 0~100!!!')
        self.__score = score
s = Student('张三',59)
s.score = 60
print(s.score)

总结:

1.第二种方法中,使用了@property装饰器将getter方法变成了属性,而此时@property又创建了另一个装饰器@score.setter,负责把setter方法变成属性赋值。这样,就把getter和setter方法装饰成了属性,在调用getter和setter方法的时候就像是在调用该类的属性那样,更直接。但是需要注意的是,此处仍然是方法,只是看起来像属性而已。

2.使用了getter和setter方法后,相比直接调用属性,可以对参数进行必要的检查,如上例中对score进行检查。

3.这里最好写上__init__函数,不然会报"instance attribute defined outside"的警告。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中两种getter和setter方法 的相关文章

  • Python 子进程(ffmpeg)仅在我按 Ctrl-C 程序时启动?

    我正在尝试使用 Cygwin 和 Python 2 7 并行运行一些 ffmpeg 命令 这大概是我所拥有的 import subprocess processes set commands ffmpeg i input mp4 outpu
  • 如何使用 conda 在一行中安装多个包?

    我需要使用 conda 安装以下多个软件包 我不确定 conda forge 是什么 有些使用 conda forge 有些不使用它 是否可以将它们安装成一行而不需要一一安装 谢谢 conda install c conda forge d
  • 无法使用 BeautifulSoup 和 Requests 抓取下拉菜单

    我想抓取百年灵网站上的产品页面以获取各种信息 示例页面 https www breitling com gb en watches navitimer b01 chronograph 46 AB0127211C1A1 https www b
  • Python 的 mysqldb 晦涩文档

    Python 模块 mysqldb 中有许多转义函数 我不理解它们的文档 而且我努力查找它们也没有发现任何结果 gt gt gt print mysql escape doc escape obj dict escape any speci
  • 使用 pandas 将字符串对象转换为 int/float

    import pandas as pd path1 home supertramp Desktop 100 life 180 data csv mydf pd read csv path1 numcigar Never 0 1 5 Ciga
  • Paramiko SSHException 通道已关闭

    我一直在使用 Paramiko 在 Linux Windows 机器上发送命令 它可以很好地在 Ubuntu 机器上远程执行测试 但是 它不适用于 Windows 7 主机 以下是我收到的错误 def unit for event self
  • 对于相同的查询,MySQL Workbench 比 Python 快得多

    MySQL Workbench 中的以下查询需要 0 156 秒才能完成 SELECT date time minute price id FROM minute prices WHERE contract id 673 AND TIMES
  • reStructuredText:README.rst 未在 PyPI 上解析

    我有一个托管在 Github 和 PyPI 上的 Python 项目 在 Github 上 https github com sloria TextBlob blob master README rst https github com s
  • 返回上个月的日期时间对象

    如果 timedelta 在它的构造函数中有一个月份参数就好了 那么最简单的方法是什么 EDIT 正如下面指出的那样 我并没有认真考虑这一点 我真正想要的是上个月的任何一天 因为最终我只会获取年份和月份 因此 给定一个日期时间对象 返回的最
  • Pandas groupby apply 执行缓慢

    我正在开发一个涉及大量数据的程序 我正在使用 python pandas 模块来查找数据中的错误 这通常工作得非常快 然而 我当前编写的这段代码似乎比应有的速度慢得多 我正在寻找一种方法来加快速度 为了让你们正确测试它 我上传了一段相当大的
  • 将列表中的 None 替换为最左边的非 none 值

    Given a None 1 2 3 None 4 None None I d like a None 1 2 3 3 4 4 4 目前我已经用以下方法强制它 def replaceNoneWithLeftmost val last Non
  • 在seaborn中对箱线图x轴进行排序

    我的数据框round data看起来像这样 error username task path 0 0 02 n49vq14uhvy93i5uw33tf7s1ei07vngozrzlsr6q6cnh8w 39 png 1 0 10 n49vq
  • 在python中读取PASCAL VOC注释

    我在 xml 文件中有注释 例如这个 它遵循 PASCAL VOC 约定
  • 更换壳牌管道[重复]

    这个问题在这里已经有答案了 在 subprocess 模块的 Python 2 7 文档中 我找到了以下片段 p1 Popen dmesg stdout PIPE p2 Popen grep hda stdin p1 stdout stdo
  • 在 matplotlib 中绘制多边形的并集[重复]

    这个问题在这里已经有答案了 我正在尝试绘制几个多边形的并集matplotlib 具有一定的 alpha 水平 我当前的代码在交叉点处颜色较深 有没有办法让交叉路口与其他地方的颜色相同 import matplotlib pyplot as
  • 在Python中连续解析文件

    我正在编写一个脚本 该脚本使用 HTTP 流量行解析文件 并取出域 目前仅将它们打印到屏幕上 我正在使用 httpry 将流量连续写入文件 这是我用来删除域名的脚本 usr bin python import re input open r
  • Python 导入非常慢 - Anaconda python 2.7

    我的 python import 语句变得非常慢 我使用 Anaconda 包在本地运行 python 2 7 导入模块后 我编写的代码运行得非常快 似乎只是导入需要很长时间 例如 我使用以下代码运行了一个 tester py 文件 imp
  • Pip 无法在 Windows 上安装 Twisted

    我正在尝试在 Windows 8 计算机上安装 Twisted 在 Twisted 官方网站上 只有一个 Windows 版的 Wheel 文件 https twistedmatrix com trac wiki Downloads htt
  • 使用 SERVER_NAME 时出现 Flask 404

    在我的 Flask 配置中 我将 SERVER NAME 设置为 app example com 之类的域 我这样做是因为我需要使用url for with external网址 如果未设置 SERVER NAME Flask 会认为服务器
  • 在python中对列表列表执行行总和和列总和

    我想用python计算矩阵的行和和列和 但是 由于信息安全要求 我无法使用任何外部库 因此 为了创建矩阵 我使用了列表列表 如下所示 matrix 0 for x in range 5 for y in range 5 for pos in

随机推荐

  • Java获取指定日期的0点以及24点

    指定Date date 比如是 2022 12 09 12 34 28 获取这天的开始时间和结束时间 获得某天最大时间 2022 12 09 23 59 59 public static Date getEndOfDay Date date
  • 没有客户端执行mysql_重学MySQL:谈一谈MySQL架构

    作为一名Web后端程序员 需要经常与MySQL打交道 不过更多的时候还是停留在增删改查 CURD 的应用层面 然而随着负责项目的数据量增长和服务器硬件性能开始出现瓶颈 让我感觉有必要更加全面深入地学习与了解MySQL 以便更好地发挥MySQ
  •  使用jsp实现留言板功能

    使用jsp实现留言板功能 一 开发环境 本项目使用eclipse MySQL8 0进行开发 在开发的过程中使用了一个jar包 mysql connector java 8 0 16 jar 点我下载 二 项目结构 1 index jsp
  • 信息安全建设之开源安全产品

    对于中小企业来说 有很多免费且开源的路由器和防火墙解决方案 甚至可以作为企业的选择 这类产品中 很多都提供局域网服务 如VPN服务 热点网关和通过强制网络门户以共享无线网络 当我们在考虑安全解决方案的时候 最便于操作的肯定是商业产品 最经济
  • [整理][LaTex]小技巧之——首行缩进

    0 简介 在LaTex编辑时 有时会遇到这样一个有关于首行缩进的问题 在汉语环境的编辑下 习惯上每段会进行一个两个字的缩进 但是在默认编辑模式下 一个章节下的首段是没有首行缩进的 本文的目的主要是解决中文情况下首段缩进的情况 1 默认情况
  • Java入门 (超详细)JDK(1.8)下载与安装及环境变量的配置教程

    第一步 下载JDK 8 Oracle官网下载地址 https www oracle com java technologies javase javase8u211 later archive downloads html 进入官网JDK
  • 鸿蒙是一个怎么样的操作系统,真的是安卓套壳吗?

    从鸿蒙项目正式推出以来 就一直有各自声音 有看好的 认为鸿蒙的出现将会成为一个智能终端设备操作系统的框架和平台 促进万物互联产业的繁荣发展 也有的人在唱衰 觉得鸿蒙发展不起来 甚至认为鸿蒙只是安卓的换皮 套壳 那事实是怎么样的 鸿蒙与安卓之
  • 微信群发图文消息步骤说明

    前段时间学习微信接口开发 心得与大家分享 第一步 调用 上传下载多媒体接口 上传图片 接收微信服务器返回结果 解析获取返回的url的值 等待备用 第二步 调用 上传图文消息素材 接口 截图中红色方框标记的thumb media id的值替换
  • WireShark常用过滤规则

    一 地址过滤 对源地址及目的地址过滤 ip src 192 168 0 1 ip dst 192 168 0 1 对源地址或者目的地址过滤 ip addr 192 168 0 1 排除某个地址数据包过滤 ip addr 192 168 0
  • Linux中使用pip安装库时出现Aborted (core dumped)问题解决方案

    作者 陈玓玏 在Linux中安装上pip后 通过pip install安装python库时出现这个问题 root DZG0370 mnt c Windows System32 pip3 install pandas Downloading
  • Inno Setup 如何让生成的setup.exe文件有管理员权限

    首先 在 Setup 段 PrivilegesRequired admin 然后 找到INNO安装目录下的SetupLdr e32文件 将程序中的Manifest更改一下 用reshacker这类工具改 这样运行程序的时候 Windows
  • php use not allowed,PHP Curl - Received HTTP/0.9 when not allowed

    问题 I stumbled over a weird behavior when I try to send a post HTTP 2 0 request to apples push service http2ch curl init
  • 哈工大操作系统实验二:系统调用的实现

    实验链接 文章目录 前言 做实验前一定要先拍个快照 操作系统实验环境的搭建请看如下链接 Ubuntu系统 Linux0 11环境搭建 一 实验内容 二 基础知识 三 实验步骤 注 因为实验一已经修改过启动文件 但此次实验需要完整的启动文件
  • 小白如何做好项目管理?看这里

    作为项目管理新手 你刚被安排负责一个重要的新项目 这是你的第一个项目 是一个重大的挑战 以下这些方法可以帮你有个好的开始 成功管理你的第一个项目 一 学习和培养能力 能力发展首先要突破不知道没有能力 认识项目管理是一个职业方向 通过了解项目
  • MySql Community Downloads 社区版下载地址

    https dev mysql com downloads mysql
  • Servlet+JSP+JavaBean开发模式(MVC)介绍

    好伤心 写登陆注册之前看见一篇很好的博文 没有收藏 然后找不到了 前几天在知乎上看见一个问题 什么时候感觉最无力 前两天一直想回答 尝试过google到的所有solve case 结果bug依然在 今天想回答 明明遇见过 就是找不到那篇文的
  • 深度学习 卷积神经网络即插即用的小插件

    卷积神经网络即插即用的小插件 前言 卷积神经网络设计技巧 小插件 STN ASPP Non local SE CBAM DCN v1 v2 BlurPool RFB ASFF 代码实现 前言 本篇博客主要介绍卷积神经网络中的即插即用的模块
  • Python日志库logging总结(最全的版本)

    转自 https cloud tencent com developer article 1354396 1 日志级别 Python 标准库 logging 用作记录日志 默认分为六种日志级别 括号为级别对应的数值 NOTSET 0 DEB
  • (前端)HTML之表格

    表格标签 table 的基本语法 table 表格容器tr 列td 单元格th 粗体caption 标题列 例子 table width 400 border 1 cellspacing 2 cellpadding 2 align left
  • python中两种getter和setter方法

    当给属性赋值的时候 使用实例 属性 属性值的方式显然把属性暴露出来了 并且也无法对属性值进行限制检查 java中提供了setter和getter方法 那么python是如何做的呢 在绑定属性时 如果我们直接把属性暴露出去 虽然写起来很简单