class Trout(Fish):
def __init__(self, water = "freshwater"):
self.water = water
super().__init__(self)
この行の中super().__init__(self)
self
パラメータはどのように関数に渡されますか?継承中に自己をどのように渡すことができますか?
class Trout(Fish):
def __init__(self, water = "freshwater"):
self.water = water
super().__init__(self)
この行の中super().__init__(self)
self
パラメータはどのように関数に渡されますか?継承中に自己をどのように渡すことができますか?
これはメソッド解決順に適切なクラスを表すプロキシオブジェクトを返すsuper()
、Trout.__init__
内部
f = Trout.__new__()
Trout.__init__(f)
とほぼ同等であり、あなたがコード舞台裏
f = Trout()
があるとTrout
;実際には明示的な引数としてself
を渡す必要はありません。 super().__init__
の既定値は、self
の既定のバインドメソッドです。
しかし、もしあれば、基本クラスの__init__にself以外の二つの引数がありますか?それはエラーを与えるだろうか? – user8751232
いいえ。 'Trout()'に渡された引数は暗黙的に '__new__'と' __init__'に渡されます。しかし、 'Trout .__ init__'が' Fish .__ init__'に渡される追加の引数を取るように定義されている場合、あなたは 'super().__ init__'を呼び出すときにそれらを明示的に渡す責任があります。 – chepner
メソッドを呼び出すオブジェクトは、メソッドの最初の引数を暗黙的に(自動的に)呼び出します。これは、言語がそれ自身で作る契約です。
実際には、obj
オブジェクトには、単純なブール引数をとるメソッドstuff
を持つタイプがあるとします。あなたは、これは「通常の」機能であれば、あなたは
stuff(obj, True)
として、それを呼び出します
obj.stuff(True)
としてメソッドを呼び出して...それはどのようなクラスの構文ではありませんし、作品をオブジェクト。いずれの場合も、関数/メソッドヘッダは同じになります。ここ
def stuff(self, flag):
違いは、各オブジェクトクラスはメソッドstuff
を持つことができるということであり、我々は彼らに別の名前を付ける必要はありません。クラスメソッドを使用するとき、コンパイラーは、呼び出すオブジェクトのクラスを調べることによってどのクラスを使用するかを知っています。 __init__
方法の特定の場合において
、オブジェクトが入るとすぐに作成され、self
に割り当てられます。これはです。自動的にこの言語自体で作成されます。この特殊名付き関数には、入力時にデフォルトオブジェクトの不可視の作成が含まれています。
super().__ init __(self)、この行での自己の働き?? – user8751232
どうしたのですか? – Carcigenicate
super().__ init __(self)、この行での自己の働き?? @Carcigenicate – user8751232