Python通过属性手段实现只允许调用一次的示例讲解


Posted in Python onApril 21, 2018

如果希望一个对象的某个方法只能够调用一次,按照我之前的惯性思维,我肯定是定义一个状态量然后每次调用的时候修改它的值。通过查看状态量的数值,我可以决定采取执行不同的处理。

其实,除此之外还有一种方法,不仅仅能够实现这样的处理,还能够顺便处理对象的属性。

先看一下如下的代码:

class DemoClass:
  def __init__(self):
    pass
  def AttrCheck(self):
    try:
      self.value
      print("already hasvalue")
      raise ValueAttrError
    except AttributeError:
      self.value = 0
      print(self.value)
 
obj = DemoClass()
obj.AttrCheck()
obj.AttrCheck()

程序执行结果如下:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python attr1.py
0
already has value
Traceback (mostrecent call last):
 File "attr1.py", line 15, in<module>
 obj.AttrCheck()
 File "attr1.py", line 8, inAttrCheck
 raiseRuntimeError("multi-excued!")
RuntimeError:multi-excued!

从上面的结果看,我们所描述到的功能已经这样实现了!

上面的属性是给了默认的赋值,我们当然也可以改成带有赋值数值的形式:

class DemoClass:
  def __init__(self):
    pass
  def AttrCheck(self,value):
    try:
      self.value
      print("already hasvalue")
      raiseRuntimeError("multi-excued!")
    except AttributeError:
      self.value = value
      print(self.value)
 
obj = DemoClass()
obj.AttrCheck(123)
obj.AttrCheck(123)

程序的执行结果如下:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python attr1.py
123
already has value
Traceback (mostrecent call last):
 File "attr1.py", line 15, in<module>
 obj.AttrCheck(123)
 File "attr1.py", line 8, in AttrCheck
 raiseRuntimeError("multi-excued!")
RuntimeError:multi-excued!

以上这篇Python通过属性手段实现只允许调用一次的示例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
urllib2自定义opener详解
Feb 07 Python
Python实现大文件排序的方法
Jul 10 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 Python
Python3中的bytes和str类型详解
May 02 Python
python单例模式的多种实现方法
Jul 26 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
Feb 28 Python
Python爬取数据并实现可视化代码解析
Aug 12 Python
python破解同事的压缩包密码
Oct 14 Python
Python+OpenCV图像处理——实现轮廓发现
Oct 23 Python
python re.match()用法相关示例
Jan 27 Python
使用Python和xlwt向Excel文件中写入中文的实例
Apr 21 #Python
使用pandas读取csv文件的指定列方法
Apr 21 #Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 #Python
pandas or sql计算前后两行数据间的增值方法
Apr 20 #Python
对pandas进行数据预处理的实例讲解
Apr 20 #Python
pandas 两列时间相减换算为秒的方法
Apr 20 #Python
详谈pandas中agg函数和apply函数的区别
Apr 20 #Python
You might like
php中显示数组与对象的实现代码
2011/04/18 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
javascript高亮效果的二种实现方法
2008/09/14 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
js轮播图代码分享
2016/07/14 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
Node 代理访问的实现
2019/09/19 Javascript
django进阶之cookie和session的使用示例
2018/08/17 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
浅析Python3 pip换源问题
2020/01/06 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
写好自荐信的几个要点
2013/12/26 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
竞赛口号大全
2014/06/16 职场文书
大学生创业计划书
2014/08/14 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
Mysql 设置boolean类型的操作
2021/06/04 MySQL
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL
字节飞书面试promise.all实现示例
2022/06/16 Javascript