2017-11-09 11 views

答えて

1

これはメソッド解決順に適切なクラスを表すプロキシオブジェクトを返すsuper()Trout.__init__内部

f = Trout.__new__() 
Trout.__init__(f) 

とほぼ同等であり、あなたがコード舞台裏

f = Trout() 

があるとTrout;実際には明示的な引数としてselfを渡す必要はありません。 super().__init__の既定値は、selfの既定のバインドメソッドです。

+0

しかし、もしあれば、基本クラスの__init__にself以外の二つの引数がありますか?それはエラーを与えるだろうか? – user8751232

+0

いいえ。 'Trout()'に渡された引数は暗黙的に '__new__'と' __init__'に渡されます。しかし、 'Trout .__ init__'が' Fish .__ init__'に渡される追加の引数を取るように定義されている場合、あなたは 'super().__ init__'を呼び出すときにそれらを明示的に渡す責任があります。 – chepner

0

メソッドを呼び出すオブジェクトは、メソッドの最初の引数を暗黙的に(自動的に)呼び出します。これは、言語がそれ自身で作る契約です。

実際には、objオブジェクトには、単純なブール引数をとるメソッドstuffを持つタイプがあるとします。あなたは、これは「通常の」機能であれば、あなたは

stuff(obj, True) 

として、それを呼び出します

obj.stuff(True) 

としてメソッドを呼び出して...それはどのようなクラスの構文ではありませんし、作品をオブジェクト。いずれの場合も、関数/メソッドヘッダは同じになります。ここ

def stuff(self, flag): 

違いは、各オブジェクトクラスはメソッドstuffを持つことができるということであり、我々は彼らに別の名前を付ける必要はありません。クラスメソッドを使用するとき、コンパイラーは、呼び出すオブジェクトのクラスを調べることによってどのクラスを使用するかを知っています。 __init__方法の特定の場合において


、オブジェクトが入るとすぐに作成され、selfに割り当てられます。これはです。自動的にこの言語自体で作成されます。この特殊名付き関数には、入力時にデフォルトオブジェクトの不可視の作成が含まれています。

+0

super().__ init __(self)、この行での自己の働き?? – user8751232

関連する問題