先看一段**:
複製** **如下:
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 函式的...