首页 > 其他 > 详细

描述符应用

时间:2019-10-11 18:01:23      阅读:101      评论:0      收藏:0      [点我收藏+]

一、针对name属性的类型检查

class Type:
    def __init__(self,key):
        self.key = key

    def __get__(self, instance, owner):
        print("get方法")
        return instance.__dict__[self.key]

    def __set__(self, instance, value):
        print("set方法")
        if not isinstance(value,str):
            return "你传入的不是字符串"
        instance.__dict__[self.key] = value

    def __delete__(self, instance):
        print("正在执行delete")
        instance.__dict__.pop(self.key)

class People:
    name = Type(‘name‘)  #这样传入参数后,就可以让描述符去代理别的属性
    def __init__(self,name,age,salary):
        self.name = name
        self.age = age
        self.salary = salary
p1 = People(‘alex‘,13,13.3)
print(p1.name)
print(p1.__dict__)

技术分享图片  

但是上述代码只能针对字符串进行判断,所以需要改进

class Type:
    def __init__(self,key, exp_type):
        self.exp_type = exp_type
        self.key = key

    def __get__(self, instance, owner):
        print("get方法")
        return instance.__dict__[self.key]

    def __set__(self, instance, value):
        print("set方法")
        if not isinstance(value,self.exp_type):
            raise TypeError("你传入的类型不是",self.exp_type)   #高端玩法,主动引出错误
        instance.__dict__[self.key] = value

    def __delete__(self, instance):
        print("正在执行delete")
        instance.__dict__.pop(self.key)

class People:
    name = Type(‘name‘,str)  #这样传入参数后,就可以让描述符去代理别的属性
    age = Type(‘age‘,int)
    def __init__(self,name,age,salary):
        self.name = name
        self.age = age
        self.salary = salary
p1 = People(‘jinling‘,"18",13000)
print(p1.name)
print(p1.__dict__)

技术分享图片

class Type:
    def __init__(self,key, exp_type):
        self.exp_type = exp_type
        self.key = key

    def __get__(self, instance, owner):
        print("get方法")
        return instance.__dict__[self.key]

    def __set__(self, instance, value):
        print("set方法")
        if not isinstance(value,self.exp_type):
            raise TypeError("你传入的类型不是",self.exp_type)
        instance.__dict__[self.key] = value

    def __delete__(self, instance):
        print("正在执行delete")
        instance.__dict__.pop(self.key)

class People:
    name = Type(‘name‘,str)  #这样传入参数后,就可以让描述符去代理别的属性
    age = Type(‘age‘,int)
    def __init__(self,name,age,salary):
        self.name = name
        self.age = age
        self.salary = salary
p1 = People(‘jinling‘,18,13000)
print(p1.name)
print(p1.__dict__)

技术分享图片  

  

描述符应用

原文:https://www.cnblogs.com/dabai123/p/11655803.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!