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使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
python生成ppt的方法
Jun 07 Python
使用Flask集成bootstrap的方法
Jul 24 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
tensorflow的计算图总结
Jan 12 Python
python实现猜单词游戏
May 22 Python
Flask中jinja2的继承实现方法及实例
Mar 03 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
虫族 ZERG 概述
2020/03/14 星际争霸
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
Javascript 对象的解释
2008/11/24 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
在JS数组特定索引处指定位置插入元素的技巧
2014/08/24 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
Javascript中的几种URL编码方法比较
2015/01/23 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
python实现用户管理系统
2018/01/10 Python
简述Python2与Python3的不同点
2018/01/21 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
Python读写锁实现实现代码解析
2020/11/28 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
苹果Mac升级:MacSales.com
2017/11/20 全球购物
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
彩色的翅膀教学反思
2014/04/25 职场文书
4s店活动策划方案
2014/08/25 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
运动会800米赞词
2015/07/22 职场文书