Python怎么使用描述符实现属性类型检查
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇"Python怎么使用描述符实现属性类型检查"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来
千家信息网最后更新 2025年01月16日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安全错误
数据库的锁怎样保障安全
融媒体中心网络安全报告
数据是否应该直接存在数据库
服务器专用机柜管理制度
企事业单位不维护网络安全
网络安全法发生风险
网络安全会议或比赛
win7没有信息服务器
一篇关于网络安全的作文400字
软件开发税率含硬件
软件开发曲线
网络安全常识英语作文
苏州嘉晟博源互联网科技
深圳市凯路网络技术怎么样
贵广网络技术支持岗位
邯郸市网络安全
互联网科技咖
excel服务器启动不了
支持sql 内存数据库
渭南锄禾互联网科技有限公司
鼎升互联网科技有限公司
戴尔服务器310
搭建红警联机服务器
全球网络技术专利排名
融媒体中心网络安全报告
义和软件开发培训
发生网络安全事件应该怎么做
数据库中1146
php连接2个数据库
昌平区网络安全
linux新建数据库