python如何对实例属性进行类型检查


Posted in Python onMarch 20, 2018

本文实例为大家分享了python对实例属性进行类型检查的具体代码,供大家参考,具体内容如下

案例:

在某项目中,我们实现了一些类,并希望能像静态语言那样对他们的实例属性进行类型检查

              p = Person()

              p.name = ‘xi_xi'          # 必须是str

              p.age = 18                 

# 必须是int

              p.height = 1.75               # 必须是float

需求:

可以对实例变量名指定类型

赋予不正确类型抛出异常

#!/usr/bin/python3
 
 
class Attr(object):
 """
 对Person类中属性进行类型检查
 """
 # 传入字段名字 + 指定字段类型
 def __init__(self, name, style):
  self.name = name
  self.style = style
  
 # 取值
 def __get__(self, instance, owner):
  return instance.__dict__[self.name]
  
 # 设值
 def __set__(self, instance, value):
  # 判断参数类型是否满足条件
  if isinstance(value, self.style):
   instance.__dict__[self.name] = value
  else:
   raise TypeError('need type: %s' % self.style)
  
 # 删除值
 def __delete__(self, instance):
  del instance.__dict__[self.name]
 
 
class Person(object):
 name = Attr('name', str)
 age = Attr('age', int)
 height = Attr('height', float)
  
 
if __name__ == '__main__':
 p = Person()
  
 p.name = 'xi_xi'
 # p.name = 55
 p.age = 18
 p.height = 1.75
 print(p.name, p.age, p.height)
  
 del p.height

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中操作时间之strptime()方法的使用
Dec 30 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
python递归法解决棋盘分割问题
Jul 17 Python
Django REST framework内置路由用法
Jul 26 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
Jul 03 Python
django和flask哪个值得研究学习
Jul 31 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
Sep 16 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
详解如何修改python中字典的键和值
Sep 29 Python
python利用opencv实现颜色检测
Feb 23 Python
Python+OpenCV实现在图像上绘制矩形
Mar 21 Python
python如何在循环引用中管理内存
Mar 20 #Python
Windows 7下Python Web环境搭建图文教程
Mar 20 #Python
Python中%是什么意思?python中百分号如何使用?
Mar 20 #Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 #Python
Django开发中复选框用法示例
Mar 20 #Python
python如何通过twisted实现数据库异步插入
Mar 20 #Python
分分钟入门python语言
Mar 20 #Python
You might like
PHP校验ISBN码的函数代码
2011/01/17 PHP
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
yii中widget的用法
2014/12/03 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
jQuery 选择器详解
2015/01/19 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
Python内置的字符串处理函数整理
2013/01/29 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
Python中不同进制的语法及转换方法分析
2016/07/27 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
python3中rank函数的用法
2019/11/27 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
三月学雷锋月活动总结
2014/04/28 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python