python - 装饰器+描述符(给类添加属性且属性类型审核)

装饰器+描述符

实现给一个类添加属性且对添加的时,对属性进行类型审核:

def zsq(**kwargs):
    def fun(obj):
        for i,j in kwargs.items():
            setattr(obj,i,mxf(i,j))
        return obj
    return fun

class mxf():
    def __init__(self,na,ty):
        self.na = na
        self.ty = ty
    def __get__(self, instance, owner):
        return instance.ty
    def __set__(self, instance, value):
        if isinstance(value,self.ty):
            instance.__dict__[self.na] = value
        else:
            print("%s=%s 录入类型错误...."%(self.na,value))

@zsq(name=str,old=int)
class Student():
    def __init__(self,name,old):
        self.name = name
        self.old = old

A1 = Student(‘anec‘,18)
A2 = Student(4343,‘123‘)
print(A1.__dict__)
print(A2.__dict__)

原文地址:https://www.cnblogs.com/Anec/p/9799702.html

时间: 2024-08-28 17:05:47

python - 装饰器+描述符(给类添加属性且属性类型审核)的相关文章

由浅入深,走进Python装饰器-----第二篇:进阶--类装饰函数

**类装饰器** @类 函数 2.1 用类装饰器来扩展原函数 # 用类装饰器来扩展原函数, 通过对象函数化触发__call__方法,进行返回 class KuoZhan(): def __call__(self,f): return self.newfunc(f) def newfunc(self,f): def in_newfunc(): print("1") f() print("2") return in_newfunc @KuoZhan() #1. KuoZ

python 装饰器 四 (带有类参数的装饰器)

#!/usr/bin/env python#_*_coding=utf-8_*_#Author: xieyixue#mail: [email protected]#Created Time: 2015年07月01日 星期三 01时30分36秒 class staticClass: def __init__(self): print "初始化" @staticmethod def before(): print "before" @staticmethod def a

Python之路(十二):描述符,类装饰器,元类

python基础之面向对象(描述符.类装饰器及元类) 描述符 描述符(__get__,__set__,__delete__)   # 这里着重描述了python的底层实现原理 1. 描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议. __get__():调用一个属性时,触发 __set__():为一个属性赋值时,触发 __delete__():采用del删除属性时,触发 1 class

Python之旅的第28天(描述符、类的装饰器)

周末真好,时间充裕,都能按照要求自己练习,感觉就是好 一.描述符 上次针对描述符的内容,理解的非常不到位,所以我就特地找了新的内容好好看了看,总结一下就是下面这些 # 前天我大概知道类描述符的一些特性,以及什么是数据描述符和非数据描述符 # 今天白天没事琢磨了一下,顺便又看了看各种案例,貌似理解更深入了一些 # 数据描述符:就是这个类属性是由一个实现了__get__(),__set__(),__delete__()中方法的新式类搞定了 # 非数据描述符则是,没有__set__方法的 # 当时没有

由浅入深,走进Python装饰器-----第四篇:进阶--函数装饰类

**函数装饰器** @函数 类 本篇只是用一个简单的例子,验证函数可以对类进行修饰, 但是由于返回的值为函数,并不是类, 而且改变了原有类的调用方式,所以没有实际应用的意义,就不深入探讨 3.1 用函数装饰器来扩展原类 def KuoZhan(cls): def new_func(): print("类里新增的方法new_func") def new_class(): cls.say = "类里新增的属性" cls.new_func = new_func cls.f

由浅入深,走进Python装饰器-----第五篇:进阶--类装饰类

**类装饰器** @类 类 4.1 用类装饰器来扩展原类( 增加属性和方法 ) # 用类装饰器来扩展原函数, 通过对象函数化触发__call__方法,进行返回 class KuoZhan(): def __call__(self,cls): return self.newfunc(cls) def good(self): print("新增的方法!") def newfunc(self,cls): def in_newfunc(): cls.addpty = "新增的属性&q

Python装饰器实现类Java注解功能

最近想用Python写一个简单生成器,类似指定类型和范围,返回指定列表: 比如想要  0 ~ 3 的整数,则 我只需要指定: 最小:0, 最大:3, 步长:1 则返回一个 [0,1,2,3] 的列表 思路是用Python 装饰器,在def方法上打装饰器,装饰器内部替换方法调用时传入的参数值 代码如下: 1 # coding=utf-8 2 3 def integer(min=0, max=100, step=1): 4 def deco(func): 5 def wrapper(val): 6

python2.7高级编程 笔记二(Python中的描述符)

Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些"中级"的语言特性有着完善的文档,并且易于学习. 但是这里有个例外,那就是描述符.至少对于我来说,描述符是Python语言核心中困扰我时间最长的一个特性.这里有几点原因如下: 有关描述符的官方文档相当难懂,而且没有包含优秀的示例告诉你为什么需要编写描述符(我得为Raymond Hettinger辩护一

Python装饰器由浅入深

装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们以装饰函数为例子介绍其用法.要理解在Python中装饰器的原理,需要一步一步来.本文尽量描述得浅显易懂,从最基础的内容讲起. (注:以下使用Python3.5.1环境) 一.Python的函数相关基础 第一,必须强调的是python是从上往下顺序执行的,而且碰到函数的定义代码块是不会立即执行它的,只