巧用Python裝飾器 免去呼叫父類建構函式的麻煩

2022-10-05 00:36:12 字數 1207 閱讀 2519

先看一段**:

複製** **如下:

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, seldqiuowf).__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(oldclaswww.cppcns.coms.__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)dqiuow:

print self.a, self.b, self.c

本文標題: 巧用python裝飾器 免去呼叫父類建構函式的麻煩

本文位址:

python程式設計(巧用裝飾器)

以前沒有用過裝飾器,也不知道它有什麼用。直到最近寫了乙個log函式,在直到原來python的裝飾器可以這麼方便。1 原來debug訊息的寫法 假設有乙個process函式,原來是這麼寫的,def process arg,dic pass後面,我們為了確認這個函式是否被呼叫了,那麼可以這麼寫,def ...

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...

python裝飾器 裝飾器

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...