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中用于检查英文字母大写的isupper()方法
May 19 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
Python类属性的延迟计算
Oct 22 Python
Python实现动态加载模块、类、函数的方法分析
Jul 18 Python
基于python的字节编译详解
Sep 20 Python
Python聊天室程序(基础版)
Apr 01 Python
python smtplib模块自动收发邮件功能(一)
May 22 Python
用Python逐行分析文件方法
Jan 28 Python
Python中format()格式输出全解
Apr 12 Python
python Tensor和Array对比分析
Jan 08 Python
Python3+Django get/post请求实现教程详解
Feb 16 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面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
浅析Python函数式编程
2018/10/06 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
Python原始套接字编程实例解析
2020/01/29 Python
python 动态绘制爱心的示例
2020/09/27 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
美术专业自荐信
2014/07/07 职场文书
四风自我剖析材料
2014/09/30 职场文书
2014财务年终工作总结
2014/12/08 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
同事欢送会致辞
2015/07/31 职场文书
导游词之南京中山陵
2019/11/27 职场文书
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL