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 を継承するクラス、この文を見てください。
super(T1, self).__init__()
この
threading のように書くことを好む人もいます。 Thread.__init__(self)
もちろん、親クラスのコンストラクターを呼び出す機能です。
私は長い間 Python コードを書いてきましたが、これを書くたびに車輪の再発明をしているような気分になります。私は突然デコレータの利点を思い出し、Python 使用者が悲惨な状況から抜け出し、親クラスのコンストラクタを手動で呼び出す手間を回避できるように autoInitClass を作成しようとしました。
コードは次のとおりです:
コードをコピーします コードは次のとおりです:
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 デコレータを使用して新しいクラスを構築します:
Copy code コードは次のとおりです:
@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 のブログ、転載する場合は出典を明記してください