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之网站的结构
Oct 24 Python
Python中取整的几种方法小结
Jan 06 Python
用Python实现KNN分类算法
Dec 22 Python
python计算日期之间的放假日期
Jun 05 Python
详解Django 中是否使用时区的区别
Jun 14 Python
python使用magic模块进行文件类型识别方法
Dec 08 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
Python库安装速度过慢解决方案
Jul 14 Python
Matplotlib 折线图plot()所有用法详解
Jul 28 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
PyTorch device与cuda.device用法
Apr 03 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之static静态属性与静态方法实例分析
2015/07/30 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
自写的一个jQuery圆角插件
2010/10/26 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
django定期执行任务(实例讲解)
2017/11/03 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
通过python检测字符串的字母
2020/02/18 Python
python中tab键是什么意思
2020/06/18 Python
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
日本订房网站,预订日本星级酒店/温泉旅馆:Relux(支持中文)
2020/01/03 全球购物
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
工程现场管理求职自荐信
2013/10/02 职场文书
电子商务毕业生求职信
2013/11/10 职场文书
小学美术教学反思
2014/02/01 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
运动会开幕式致辞
2015/07/29 职场文书
Python实现简单得递归下降Parser
2022/05/02 Python