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 相关文章推荐
详细探究Python中的字典容器
Apr 14 Python
Python读取视频的两种方法(imageio和cv2)
Apr 15 Python
python删除不需要的python文件方法
Apr 24 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
Python数据存储之 h5py详解
Dec 26 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
Python callable内置函数原理解析
Mar 05 Python
Python request操作步骤及代码实例
Apr 13 Python
解决python运行效率不高的问题
Jul 20 Python
PyQt5实现多张图片显示并滚动
Jun 11 Python
python unittest单元测试的步骤分析
Aug 02 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
用JavaScript实现贪吃蛇游戏
2020/10/23 Javascript
Python中的并发编程实例
2014/07/07 Python
解决python super()调用多重继承函数的问题
2019/06/26 Python
Python简易版停车管理系统
2019/08/12 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
PyTorch实现AlexNet示例
2020/01/14 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
python源文件的字符编码知识点详解
2021/03/04 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
技术人员面试提纲
2013/11/28 职场文书
三爱活动实施方案
2014/03/19 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
汽车技术服务与贸易专业求职信
2014/07/20 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
大班上学期个人总结
2015/02/13 职场文书