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在指定目录下查找gif文件的方法
May 04 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 Python
Python使用OpenCV进行标定
May 08 Python
Python unittest单元测试框架总结
Sep 08 Python
python3 中文乱码与默认编码格式设定方法
Oct 31 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
Django框架 querySet功能解析
Sep 04 Python
python 利用Pyinstaller打包Web项目
Oct 23 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
python3判断IP地址的方法
Mar 04 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 编程请选择正确的文本编辑软件
2006/12/21 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
在视频前插入广告
2006/11/20 Javascript
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
JavaScript正则表达式之multiline属性的应用
2015/06/16 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
react的hooks的用法详解
2020/10/12 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
Python实现冒泡排序的简单应用示例
2017/12/11 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
简单了解Python生成器是什么
2019/07/02 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
python列表推导式入门学习解析
2019/12/02 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
介绍Java的内部类
2012/10/27 面试题
个人自荐信
2013/12/05 职场文书
学前班学生评语
2014/12/29 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android