Python怎么使用描述符实现属性类型检查
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇"Python怎么使用描述符实现属性类型检查"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来
千家信息网最后更新 2025年02月23日Python怎么使用描述符实现属性类型检查
这篇"Python怎么使用描述符实现属性类型检查"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Python怎么使用描述符实现属性类型检查"文章吧。
1、如何使用描述符对实例属性做类型检查?
实际案例:
在某项目中,我们实现了一些类,并希望能像静态类型语言那样(C,C++,Java)对它们的实例属性做类型检查。
p = Person() p.name = 'Bob' # 名字属性必须是str p.age = 18 # 年龄必须是int p.height = 1.83 # 身高必须是float
要求:(1)可以对实例变量名指定类型
(2)赋予不正确类型时抛出异常
解决方案:
使用描述符来实现需要类型检查的属性:分别实现__get__, __set__,__delete__方法,在__set__内使用isinstance函数做类型检查。
拓展:静态类型语言变量只能引用一种确定类型的对象并且不能改变。类型检查是由编译器在编译阶段完成的,对于Python动态类型语言来讲一个变量可以引用任意类型的对象并且可以实时发生改变,也就是解释器不能完成类型检查,只能自己去实现。
什么是描述符?描述符就是包含__get__, __set__,__delete__这样方法的类,这三个方法只要包含其中一个那它就是描述符。
实例属性就是在一个类中将另一个类的实例作为该类的一个数属性。
2、代码演示
(1)描述符定义和访问流程介绍
class Descriptor(object): def __get__(self, instance, cls): # instance用于区分使用类访问x,还是使用实例访问x print('in __get__', instance, cls) return instance.__dict__['x'] def __set__(self, instance, value): # 在set中对于类型进行检查 print('in __set__') instance.__dict__['x'] = value def __delete__(self, instance): print('in __del__')class A(object): # 在类中定义一个类属性x x = Descriptor()a = A()# 会被Descriptor的__get__方法所截获print(a.x)# 直接使用类A访问类属性,instance会被传入Noneprint(A.x)# 会被Descriptor的__set__方法所截获a.x = 5# 会被Descriptor的__del__方法所截获del a.x'''通常来说在描述符这些方法当中访问的是instance.__dict__这个字典,也就是对于它的真正属性进行操作。'''a = A()a.x = 5print(a.__dict__)
(2)实现使用描述符检查实例属性类型
class Attr(object): def __init__(self, name, type_): self.name = name self.type_ = type_ def __get__(self, instance, cls): return instance.__dict__[self.name] def __set__(self, instance, value): # 对字段类型做检测 if not isinstance(value, self.type_): raise TypeError('expected an %s' % self.type_) instance.__dict__[self.name] = value def __delete__(self, instance): del instance.__dict__[self.name]class Person(object): # 定义一个name字段,申请描述符实例 name = Attr('name', str) age = Attr('age', int) height = Attr('height', float)p = Person()p.name = 'Bob'print(p.name)# age赋值字符串类型抛出异常错误# p.age = '17'
以上就是关于"Python怎么使用描述符实现属性类型检查"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
类型
属性
检查
实例
方法
内容
就是
变量
语言
a.x
也就是
字段
对象
文章
知识
篇文章
静态
编译
三个
个数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
财务软件开发用什么语言
seer数据库 r语言
四川大学网络安全专硕研究生
青浦区工业网络技术采购信息
网络和数据库
供电班组信息通信网络安全
关系数据库逻辑模型是什么集合
为什么无法连上苹果服务器
巨人网络安全知识
5g基带产品软件开发
数据库同步技术的应用程序
江西智慧社区软件开发系统
福建多功能网络技术服务计划表
怎样学网络技术
金山区网络软件开发服务收费
广州粤紫互联网科技有限公司
服务器内存三星海士力美光
联想服务器叉三角黄灯
手机要如何开我的世界服务器
网络技术不能促进人类道德
中兴在长沙软件开发多少月薪
违法网络安全法第十二条
药品批发服务器硬盘容量有啥要求
高校网络技术人员保密协议
公益性软件开发
当今网络技术趋势
丰台二手服务器回收公司
服务器最大可以储存多少东西
服务器芯片5nm吗
数据库不等于1