巧用Python装饰器 免去调用父类构造函数的麻烦_python

先看一段代码:

复制代码 代码如下:

class T1(threading.Thread):
def __init__(self, a, b, c):
super(T1, self).__init__()
self.a = a
self.b = b
self.c = c

def run(self):
print self.a, self.b, self.c

代码定义了一个继承自threading.Thread的class,看这句

super(T1, self).__init__()

也有些人喜欢这么写

threading.Thread.__init__(self)

当然作用都是调用父类的构造函数。

写了这么久的python代码,每次写到这都有重复造轮子的感觉。刚才突然想到装饰器这个好东西,试着写了个autoInitClass来帮助pythoner脱离苦海,免去手动调用父类构造函数的麻烦。
代码如下:

复制代码 代码如下:

def autoInitClass(OldClass):
superClass = OldClass.mro()[1]
class NewClass(OldClass):
def __init__(*args):
self = args[0]
superClass.__init__(self)
apply(OldClass.__init__, args)
return NewClass

使用autoInitClass装饰器构造新类:

复制代码 代码如下:

@autoInitClass
class T2(threading.Thread):
def __init__(self, a, b, c):
#不用再写super(T2, self).__init__()
self.a = a
self.b = b
self.c = c

def run(self):
print self.a, self.b, self.c

本文来自: itianda's blog ,转载请注明原文出处

时间: 2024-12-27 09:52:09

巧用Python装饰器 免去调用父类构造函数的麻烦_python的相关文章

python 装饰器功能以及函数参数使用介绍_python

简单的说:装饰器主要作用就是对函数进行一些修饰,它的出现是在引入类方法和静态方法的时候为了定义静态方法出现的.例如为了把foo()函数声明成一个静态函数 复制代码 代码如下: class Myclass(object): def staticfoo(): ............ ............ staticfoo = staticmethod(staticfoo) 可以用装饰器的方法实现: 复制代码 代码如下: class Myclass(object): @staticmethod

Python装饰器使用示例及实际应用例子_python

测试1 deco运行,但myfunc并没有运行 复制代码 代码如下: def deco(func):     print 'before func'     return func def myfunc():     print 'myfunc() called'   myfunc = deco(myfunc) 测试2 需要的deco中调用myfunc,这样才可以执行 复制代码 代码如下: def deco(func):     print 'before func'     func()   

Python装饰器详解

装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法或者类进行加工.在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象作为某一个函数的返回结果.相对于其它方式,装饰器语法简单,代码可读性高.因此,装饰器在Python项目中有广泛的应用. 装饰器最早在Python 2.5中出现,它最初被用于加工函数和方法这样的可调用对象(callable object,这样的对象定义有__call__方法).在Python 2.6以及之后的

Python装饰器使用实例:验证参数合法性

          这篇文章主要介绍了Python装饰器使用实例:验证参数合法性,本文直接给出代码实例,代码中包含详细注释,需要的朋友可以参考下               python是不带静态检查的动态语言,有时候需要在调用函数时保证参数合法.检查参数合法性是一个显著的切面场景,各个函数都可能有这个需求.但另一方面,参数合法性是不是应该由调用方来保证比较好也是一个需要结合实际才能回答的问题,总之双方约定好,不要都不检查或者都检查就可以了.下面这个模块用于在函数上使用装饰器进行参数的合法性验证

对于Python装饰器使用的一些建议

  这篇文章主要介绍了对于Python装饰器使用的一些建议,装饰器是Python学习进阶中的重要知识,需要的朋友可以参考下 装饰器基本概念 大家都知道装饰器是一个很著名的设计模式,经常被用于 AOP (面向切面编程)的场景,较为经典的有插入日志,性能测试,事务处理,Web权限校验, Cache等. Python 语言本身提供了装饰器语法(@),典型的装饰器实现如下: ? 1 2 3 @function_wrapper def function(): pass @实际上是 python2.4 才提

九步学会Python装饰器

  本文实例讲述了Python装饰器.分享给大家供大家参考.具体分析如下: 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次''' def myfunc(): print("myfunc() called.") myfunc() myfunc() 第二步:使用装饰函数在函数执行前和执行后分别附加额外功能 ?

【Python之旅】第四篇(一):Python装饰器

有时候拿到一个程序接口,需要对其进行扩展,但是又不能修改原来接口的源代码,这时候就需要使用装饰器了.     有下面一个小程序,假如是别人提供给我们的调用接口: 1 2 3 4 5 import time   def sayHi():         time.sleep(1)         print 'Hello, I am xpleaf.'     一般情况下,如果想要计算该程序的执行时间(因为有可能要对该接口进行某些性能上的测试),就需要把以上接口修改为下面这样,同时执行一下: 1 2

python装饰器初探(推荐)_python

一.含有一个装饰器 #encoding: utf-8 ############含有一个装饰器######### def outer(func): def inner(*args, **kwargs):#要装饰f1(),这里用这俩形式参数,可以接受任意个参数,不管f1定义几个参数 print "1" r = func(*args, **kwargs)#这里要用func,不要用f1 print "2" return r return inner @outer #这里ou

详解Python装饰器由浅入深_python

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