zoukankan      html  css  js  c++  java
  • python描述符

    class Type:
        def __init__(self, key, expect_type):
            self.key = key
            self.expect_type = expect_type
    
        def __get__(self, instance, owner):
            print('执行get方法')
            return instance.__dict__[self.key]
    
        def __set__(self, instance, value):
            print('执行set方法')
            if not isinstance(value, self.expect_type):
                raise TypeError('你传入的不是',self.expect_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):
            self.name = name
            self.age = age
    
    p = People('alex', 11)
    print(p.name)

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

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

    def __set__(self, instance, value):
    print('执行set方法')
    if not isinstance(value, self.expect_type):
    raise TypeError('你传入的不是',self.expect_type)

    instance.__dict__[self.key]=value

    def __delete__(self, instance):
    print('执行delete方法')
    instance.__dict__.pop(self.key)


    def deco(**kwargs): # kwargs = {'name':str, 'age': int}
    def wrapper(obj): # obj = People
    print('--->',kwargs)
    print('类名',obj)
    for key, val in kwargs.items(): # ('name',str),('age',int)

    setattr(obj, key, Type(key, val))
    return obj
    print(kwargs)
    return wrapper


    @deco(name=str, age=int) # @wrapper ==> People= wrapper(People)
    class People:
    def __init__(self, name, age):
    self.name = name
    self.age = age


    p = People('alex', 11)

    print(p.__dict__)
  • 相关阅读:
    Codeforces Round #555 (Div. 3) A B C1(很水的题目)
    蓝桥杯国赛之阶乘位数
    POJ-1258 Agri-Net(最小生成树)
    昂贵的聘礼(枚举区间+最短路)
    地斗主(矩阵快速幂)
    救救兔子(二分)
    shell编程之sed编辑器&gawk程序
    typedef struct与struct的区别
    iOS内存管理编程指南
    Object c 基础知识
  • 原文地址:https://www.cnblogs.com/majianyu/p/10248144.html
Copyright © 2011-2022 走看看