2016-07-26 21 views
0
class MyObject1(object): 
    def __init__(self): 
     super(MyObject1, self).__init__() 
     pass 

class MyObject2(object): 
    def __init__(self, arg): 
     super(MyObject2, self).__init__() 
     pass 

私はこのようなpython27コードを読んでいる、私が知っているMyObject __init __()クラスのsuper(MyObject、self).__ init __()は何をしますか?

は「スーパーは父クラスのコンストラクタ関数、

を意味しますが、これらの2つのクラスがコンストラクタ関数 『__init__』自分自身を呼び出して、なぜ私が理解できません、

実用的な効果はないようです。

+2

初期化で実際に何かを行うクラスを拡張しようとすると効果があります –

+1

「野生の中で」遭遇した2つの実際のクラスで、それらがなぜ「スーパー」を使用しているのか、 'super.init'は一般的に何をしているのですか? –

+0

これは以前に質問されているようです:http://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods and http://stackoverflow.com/questions/222877/how-to- Pythonを使う – linrongbin

答えて

3

これは、Pythonのかなり基本的なOOメソッドです。 hereを読んでください。

superselfは類似しています

スーパー()あなたは は素晴らしいことができ、明示的に基底クラスを参照することを避けることができます。しかし、主な利点は複数の継承で、 すべての種類の楽しいものが起こることがあります。 superの標準ドキュメントをご覧ください。

(このanswerから)

はここでのアクションでsuperの例です:

class Foo(object): 
    def __init__(self, frob, frotz): 
      self.frobnicate = frob 
      self.frotz = frotz 

class Bar(Foo): 
    def __init__(self, frob, frizzle): 
      super(Bar, self).__init__(frob, frizzle) 
      self.frotz = 34 
      self.frazzle = frizzle 


bar = Bar(1,2) 
print "frobnicate:", bar.frobnicate 
print "frotz:", bar.frotz 
print "frazzle:", bar.frazzle 

あなたはsuperは、(現在のクラスが継承するクラス)の基本クラスを呼び出していることがわかります、アクセス修飾子が続き、基本クラスの '.__init__()メソッドにアクセスします。それはselfのようですが、ベースクラスのためです。

コードをテストすると意味があります。

関連する問題