ホームページ > バックエンド開発 > Python チュートリアル > Python デコレータを賢く使用して、親クラスのコンストラクタを呼び出すトラブルを回避します。

Python デコレータを賢く使用して、親クラスのコンストラクタを呼び出すトラブルを回避します。

WBOY
リリース: 2016-06-16 08:47:05
オリジナル
1240 人が閲覧しました

最初にコードの一部を確認します:

コードをコピーします コードは次のとおりです:

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 のブログ、転載する場合は出典を明記してください
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート