类的装饰器应用

#使用描述符,定义描述符,
class Tyeed:
    def __init__(self,key,expected_type):#2
        self.key=key
        self.expected_type=expected_type

    def __get__(self, instance, owner):
        print('get方法')
        return instance.__dict__[self.key]#2
    def __set__(self, instance, value):
        print('set方法')
        instance.__dict__[self.key]=value
    def __delete__(self, instance):
        print('delete方法')
        instance.__dict__.pop(self.key)

def deco(**kwargs):
    def wrapper(obj):
        for key,val in kwargs.items():
            setattr(obj,key,Tyeed(key,val))
        return obj
    return wrapper
@deco(name=str,get=int)#1.typed(x=1,y=2.z=4)---->deco 2.@deco--->Foo=deco(Foo) ###
class People:
    def __init__(self,name,get,salary):
        self.name=name
        self.get=get
        self.salary=salary
p1=People(111,15,346.9)#调用p1,执行set方法
print((People.__dict__))

没有得到想要的效果

posted @ 2020-01-17 16:56  汉魂县令  阅读(42)  评论(0)    收藏  举报