誰かがこのサイトでこの全く同じ問題を抱えていましたが、答えは私が問題がある部分には関係しませんでした。
継承 - メソッド呼び出し継承の問題。 - Python
以下のクラス定義を考慮してください。 f
メソッドが呼び出されたときに呼び出されるメソッドを検討するために、あなたがこの問題については
class C1(object):
def f(self):
return 2*self.g()
def g(self):
return 2
class C2(C1):
def f(self):
return 3*self.g()
class C3(C1):
def g(self):
return 5
class C4(C3):
def f(self):
return 7*self.g()
obj1 = C1()
obj2 = C2()
obj3 = C3()
obj4 = C4()
。したがって、例えば、obj1.f()
が呼び出されたとき、C1
のg
メソッドを呼び出すC1
のメソッドf
が呼び出されます。これは、フォーム
['C1.f', 'C1.g']
の「呼び出しリスト」として表現することができ、それぞれ、変数obj2_calls
からobj2.f()
のための「呼び出しリスト」を割り当て、ということにobj3.f()
のための「呼び出しリスト」を割り当て、3つの代入文を書きます変数obj3_calls
を呼び出し、の '呼び出しリスト'を変数obj4_calls
に割り当てます。
私は最初の割り当てを理解する問題はない、それはobj2_calls = ['C2.f', 'C1.g']
ですが、私は次のものを把握しようとしている私の脳を障るています。私は、リストが['C1.f']
であることはC3.f
ではないと思ったが、残念ながらそうではありません。
ちょうどクリアし、これは
実際に何が起こっているのか把握するために、各関数にいくつかの 'print'ステートメントを追加します。 –
C3.fと入力すると、C3のC3の部分を意味するc3.f <バインド解除されたメソッドC3.f>が表示されます。 – Greg
こんにちは、私は正しい答えがあります。しかし、私はコードの理解よりもそれを得るためにもっと常識を使いました。 答えが のobj3_calls = ['C1.f'、 'C3.g']の理由を理解したいと思います。私はなぜ 'c3.g'が 'c1.f'の後に呼び出されるのか理解していません –