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__)
  • 相关阅读:
    Swift学习一
    Swift开发学习(一):初始篇
    objc_msgSend arm64 崩溃问题
    更改navigationController push和pop界面切换动画
    iOS 改变UITextField中光标颜色
    IOS Core Animation Advanced Techniques的学习笔记(五)
    使用CAShapeLayer与UIBezierPath画出想要的图形
    亮相SIGGRAPH 太极拳三维教学App制作揭秘
    MySQL优化——索引
    求职前一个月复习知识
  • 原文地址:https://www.cnblogs.com/majianyu/p/10248144.html
Copyright © 2011-2022 走看看