Python怎么使用描述符实现属性类型检查
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇"Python怎么使用描述符实现属性类型检查"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
南京欣网互联网络科技有限公司
互联网科技网
北京路客互联网科技有限公司
盈实互联网科技
与互联网科技公司
互联网金融 科技
华宇互联网科技
美国互联网科技
西安互联网科技
宜安科技 互联网金融
科技互联网公司logo
睿民互联网科技
海南科技产业互联网平台
互联网科技公司的市场部门
互联网公司科技股
工业互联网科技成果转化
东营紫格互联网科技
科技互联网行业投资研究
互联网科技接地气
云南互联网科技学费
广州互联网科技公司
远信互联网科技
融贸通互联网科技
亿人帮互联网科技
成都狮子座互联网科技
互联网科技公司做什么
辽宁互联网新科技
青岛易易互联网科技
河南商务圈互联网科技有限公司
承德科技产业互联网平台