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 相关文章推荐
pytyon 带有重复的全排列
Aug 13 Python
Python批量修改文件后缀的方法
Jan 26 Python
Python检测字符串中是否包含某字符集合中的字符
May 21 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
python爬取网页转换为PDF文件
Jun 07 Python
使用Python横向合并excel文件的实例
Dec 11 Python
numpy数组之存取文件的实现示例
May 24 Python
Python numpy数组转置与轴变换
Nov 15 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
python实现二分类和多分类的ROC曲线教程
Jun 15 Python
Python基础之tkinter图形化界面学习
Apr 29 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实现递归目录的5种方法
2016/10/27 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
[01:30:55]VG vs Mineski Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
web.py获取上传文件名的正确方法
2014/08/26 Python
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
Python卸载模块的方法汇总
2016/06/07 Python
python绘制彩虹图
2019/12/16 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
python numpy库np.percentile用法说明
2020/06/08 Python
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
思想政治自我鉴定
2013/10/06 职场文书
餐厅总经理岗位职责
2013/12/31 职场文书
大三毕业自我鉴定
2014/01/15 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang