【Python学习之旅】---描述符的应用

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

posted @ 2020-01-12 17:19  陈帅帅_大侠  阅读(201)  评论(0编辑  收藏  举报