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__)