-1

私のベースコードは次のようになります。

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()

今私の質問は次のとおりです:私は次のことを行う3つの割り当てステートメントを書く必要があります:

  • の呼び出しリストobj2.f()変数に割り当てますobj2_calls
  • の呼び出しリストobj3.f()変数に割り当てますobj3_calls
  • の呼び出しリストobj4.f()変数に割り当てますobj4_calls

たとえば、呼び出しリストが呼び出されると、のメソッドobj1.f()が呼び出され、のメソッドが呼び出されます。これは、フォームの呼び出しリストとして表すことができますfC1gC1['C1.f', 'C1.g']

課題の書き方がよくわからないので、友達のことをどうしても手伝いたいです。

最初の代入ステートメントを正しく修正する方法を教えていただければ、残りの部分を理解できると確信しています。

4

1 に答える 1

0

重要な洞察は、メソッドがクラスに対して定義されていない場合、デフォルトでクラスが継承するクラスのメソッドを使用することです。

したがって、「obj2.f()」が何をするかを自問してください。

  • クラスは何obj2ですか?ですC2
  • fクラスに定義されたメソッドはありC2ますか?はいあります。したがって、メソッドC2.fが呼び出されます。
  • C2.fメソッドはを呼び出します。self.gこれは、を検索することを意味しますC2.g'C2.g'メソッドはありますか?C2いいえ、から継承するクラスに移動する必要があります。この行class C2(C1)は、クラスから継承されていることを示しているC1ため、メソッドを呼び出しますC1.g

これらは、最初の呼び出しリストを取得するための手順です。残りはあなた次第です。

于 2012-04-19T00:26:38.650 に答える