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模块restful使用方法实例
Dec 10 Python
跟老齐学Python之编写类之二方法
Oct 11 Python
Python3 正在毁灭 Python的原因分析
Nov 28 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
Python 实现两个服务器之间文件的上传方法
Feb 13 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
使用python模拟命令行终端的示例
Aug 13 Python
python多线程分块读取文件
Aug 29 Python
python数据分析:关键字提取方式
Feb 24 Python
python使用建议技巧分享(三)
Aug 18 Python
总结Python连接CS2000的详细步骤
Jun 23 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模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
python网络编程实例简析
2014/09/26 Python
在Python中实现贪婪排名算法的教程
2015/04/17 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
Python使用gRPC传输协议教程
2018/10/16 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
瑞士最大的图书贸易公司:Orell Füssli
2019/12/28 全球购物
大学军训自我鉴定
2013/12/15 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
班组长竞聘书
2014/03/31 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
党校学习心得体会范文
2014/09/09 职场文书
爱晚亭导游词
2015/02/09 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
vue 实现上传组件
2021/05/31 Vue.js
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang