誰かがこのサイトでまったく同じ問題を抱えていましたが、その答えは私が問題を抱えている部分とは関係ありませんでした.
継承 - メソッド呼び出し
次のクラス定義を検討してください。
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']
、残念ながらそうではありませんでした。
念のため、これは宿題です