- class Typed:
- "定义一个描述符"
- def __init__(self,key,name):
- self.key=key #self.key='name'
- self.name=name #指定类型
- def __get__(self, instance, owner): #instance--> 实例 f1 ,owner--> 实例所属的类
- print('这是 get 方法')
- # print('instance 参数 [%s]' %instance)
- # print('owner 参数 [%s]' %owner)
- return instance.__dict__[self.key] #返回'name'的值
- def __set__(self, instance, value): #instance--> 实例 f1 ,value--> 赋的值'chenyuxia'
- print('这是 set 方法')
- # print('instance 参数 [%s]' %instance)
- # print('value 参数 [%s]' %value)
- if not isinstance(value,self.name): #当值不是字符窜或整形内容,
- raise TypeError('%s 传入的不是 %s' %(self.key,self.name)) #抛出报错
- instance.__dict__[self.key]=value #否则将值加入到 f1 字典
- def __delete__(self, instance):
- instance.__dict__.pop(self.key) #删除 key 和值
- class Foo:
- name=Typed('name',str) #将数据描述符赋值给 name
- age=Typed('age',int)
- def __init__(self,name,age):
- self.name=name
- self.age=age
- f1=Foo('123',18) #触发 name=Typed 赋值操作, 接着触发 set 方法
- print(f1.name) #触发 get 方法
- f1.age=123 # 实际是在操作 Typed 中的 name, 触发 set 方法
- print(f1.__dict__)
- del f1.name #触发删除方法
- print(f1.__dict__)
来源: http://www.bubuko.com/infodetail-3377687.html