8.python之面相对象part.8(类装饰器)

下面是一个对类使用装饰器的一个示例,主要目的就是给一个定义好的类通过装饰器的形式去临时增加属性或者方法。

def add_property(**kwargs):

def deco(obj):

for key,value in kwargs.items():

setattr(obj,key,value)

return obj

return deco

@ add_property(a=1,b=2,c=3)

class test:

pass

t1 = test()

print test.a

print test.b

print test.c

输出:

1

2

3

这个装饰器不止可以用在类中也可以用在对象上面。

时间: 2024-11-19 22:10:33

8.python之面相对象part.8(类装饰器)的相关文章

python 描述符 上下文管理协议 类装饰器 property metaclass

1.描述符 #!/usr/bin/python env # coding=utf-8 # 数据描述符__get__ __set__ __delete__ ''' 描述符总结 描述符是可以实现大部分python类特性中的底层魔法,包括@classmethod,@staticmethd,@property甚至是__slots__属性 描述符是很多高级库和框架的重要工具之一,描述符通常是使用到装饰器或者元类的大型框架中的一个组件 注意事项: 一 描述符本身应该定义成新式类,被代理的类也应该是新式类 二

8.python之面相对象part.6(反射&__call__,__setattr__,__delattr__,__getattr__)

一.什么是反射? 反射,又被称为自省,主要是指程序本身可以访问,检测,和修改"自己",状态或行为的一种能力. 二.python是如何体现这种反射机制的? 通过字符串去操作对象相关的属性,python中,一切皆对象,所有的地方都可以用到反射. python内部提供了四个实现反射(自省)的函数,这四个函数可以适用于任何的类和对象(这是因为类本身也是一个对象!) 1.hasattr(object,str) 用来检测一个对象中是否有某个字符串对应的方法或者属性. 例如: l1 = [] pri

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

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

python带参数和不带参数装饰器

http://blog.csdn.net/pipisorry/article/details/41902599 对于无参数的装饰器,其装饰器函数的参数是要被装饰的函数对象名: 对于有参数的装饰器在调用时使用的是应用的参数,@timeStumpFunc_args(argv)的argv,已不再是要被装饰的函数对象名,所以必须在内部再定义一个函数getfunc()来接收要被装饰的函数对象. #!/usr/bin/env python # coding=gbk """ __title

流畅的python学习笔记第七章:装饰器

装饰器就如名字一样,对某样事物进行装饰过后然后返回一个新的事物.就好比一个毛坯房,经过装修后,变成了精装房,但是房子还是同样的房子,但是模样变了. 我们首先来看一个函数.加入我要求出函数的运行时间.一般来说代码写成如下.但是我有很多个函数都要计算运行时间.每个函数里面都要写一个计时的过程是一件很麻烦的事. def target():     start=time.time()     print 'running target()'     end=time.time()     print e

类装饰器

在理解类装饰器之前,先回忆一下有关装饰器的知识.装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象(函数的引用). __call__方法 一个对象是否可调用,看其中是否实现了__call__方法.例如,类的对象是不可调用的,因为其中没有实现__call__方法.如果我们在一个类中定义了__call__方法,那么这个类对象将变得可调用.只要某个对象定义了__call__()方法,那么这个对象就是callable的. 类中没有实现_

python测试开发(02-闭包函数+装饰器)

一. 满足闭包函数条件# 条件一:函数中嵌套函数# 条件二:外层函数返回内层嵌套函数名# 条件三:内层嵌套函数有引用外层的一个非全局变量 def func(num, b): def inner(): print(num) print(b) print("这个三计算买书方式的函数") return inner res=func(100," python")res()print(res.__closure__) 二. 装饰器# 装饰什么函数,就传什么函数def logi

函数装饰器和类装饰器实现单例类

单例类,指的是这个类只能创建一个实例,创建完成后,其他类实例都无法再创建.今天我们来看一下,使用函数装饰器和类装饰器怎么实现这种特殊一点的类. 函数装饰器实现 装饰器算是类里面比较难的内容之一,但是实际上它的思想并不复杂.简单点说,就是在你原来内容的基础上,在外面给你加点东西,实现类似装饰的效果.但是它是怎么实现的呢?一般来说,都是通过拦截函数调用来实现的,比如:用装饰器装饰函数的时候,它拦截函数调用,装饰类的时候,它拦截类实例的创建调用,即拦截类初始化__init__函数.知道这个原理以后,我

8.python之面相对象part.1(初识类与对象)

一.类和对象的概念. 什么是类 类就是把一类事物相同的特征和动作整合到一起就是类比如说"人"就是一个类. 什么是对象 对象就是基于类创建出来的一个具体存在的事物这个事物包含了将其创造出来的类的特征和动作. 类与对象有什么关系一切的对象都是由类产生的假如说造一支笔首先要有一个造笔的模版上帝制造人也是一样制造一个人也需要一个造人的模版这个模板就是人的"类"然后根据类的定义来产生一支支笔和一个个的人. 什么是实例化 由类产生对象的过程就是实例化类实例化的结果就是一个对象对

8.python之面相对象part.9(初识元类part.1)

初步认识元类 #本篇文章介绍的元类,以及type以python3以上版本为准. 一.关于元类的前言. 在python中,一切皆对象,当然,类也是一个对象. class c1: pass obj1 = c1() 从上面这段例子可以看到,obj1是c1这个类创建出来的一个对象,obj1是由c1去产生的,如果按照前面的理论来理解,类也是一个对象,那么c1是由谁创建出来的呢? #type函数可以查看类型,也可以用来查看对象的类,二者是一样的 print(type(obj1)) # 输出:<class '