Python实现实例属性类型检查的自定义描述符方案
本文介绍如何在Python中通过实现描述符协议来对实例属性进行类型检查。通过定义包含__get__、__set__和__delete__方法的类,可以在赋值时自动验证数据类型,若类型不符则抛出TypeError。该方案模拟了静态语言的类型约束行为,适用于需要严格数据校验的类设计场景。
本文展示了在Python中实现实例属性类型检查的具体代码示例,供读者参考学习。
具体案例如下:
在某个项目场景中,我们定义了一些类,并期望能够像静态类型语言那样,对其实例的属性进行严格的类型检查。
创建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
以上就是本文的全部内容,希望对读者有所帮助,也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









