码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-01-12 17:57:17      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:赋值   指定   --   name   init   instance   %s   strong   str   

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

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

标签:赋值   指定   --   name   init   instance   %s   strong   str   

原文地址:https://www.cnblogs.com/chenyuxia/p/12183218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!