誰かがこのサイトでまったく同じ問題を抱えていましたが、その答えは私が問題を抱えている部分とは関係ありませんでした.
継承 - メソッド呼び出し
次のクラス定義を検討してください。
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()
この問題では、メソッドが呼び出されたときにどのメソッドが呼び出されるかを検討する必要がありますf。たとえば、obj1.f()が呼び出されると、 のfメソッドC1を呼び出す のgメソッドが呼び出されますC1。これは、次の形式の「呼び出しリスト」として表すことができます。
['C1.f', 'C1.g']
obj2.f()'calling list' forを変数obj2_callsに代入し、'calling list' forobj3.f()を変数 にobj3_calls代入し、'calling list' for を変数 に代入する 3 つの代入ステートメントをそれぞれ記述しobj4.f()ますobj4_calls。
最初の課題を理解するのに問題はありませんが、次の課題を理解obj2_calls = ['C2.f', 'C1.g']
しようとして頭を悩ませています。C3.fリストがあるとは思っていなかったので['C1.f']、残念ながらそうではありませんでした。
念のため、これは宿題です