首页 > 代码库 > 神奇的描述符(二):使用描述符实现实例属性的类型检查
神奇的描述符(二):使用描述符实现实例属性的类型检查
因为描述符本身可以接管实例属性的访问,利用这个特点,可以使用描述符来实现一些实例属性的类型检查工作。
先定义一个描述符 Point,用于管理坐标信息。
class Point: def __init__(self, name): self.name = name def __get__(self, instance, owner): # 通常情况下,通过类属性访问描述符时,返回描述符自身 if instance is None: return self # 通过实例属性访问描述符时,返回实例 else: return instance.__dict__[self.name] def __set__(self, instance, value): try: # 检查坐标格式是否有异常 x, y = value instance.__dict__[self.name] = x, y except TypeError: raise TypeError(‘无效的坐标信息‘)
定义一个Address类,及类属性home,home接收一个坐标信息
class Address: home = Point(‘myhome‘)
实例化Address,并对实例属性进行赋值
addr = Address() # 将坐标信息赋值给home addr.home = 123, 321 print(addr.home) # (123, 321) # 错误的赋值 addr.home = 123 # TypeError: 无效的坐标信息
第一次,赋值给home一个正确的坐标信息: 123, 321,符合point的赋值要求,并且能通过 addr.home 读取。
第二次,赋值给home 一个 int 类型的变量 123,因为描述符会接管实例属性的读写,所以在赋值时,执行的是Point描述符的 __set__ 的方法,在对 value 进行解包时,int 类型无法解包,引发
TypeError异常,赋值失败,达到了对实例属性进行类型检查的效果。
神奇的描述符(二):使用描述符实现实例属性的类型检查
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。