2012-04-18 136 views
-1

我的基本代碼如下所示:Python的繼承

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

現在我的問題是:我需要寫三篇賦值語句執行以下操作:

  • 分配調用列表obj2.f()給變量obj2_calls
  • 指定呼叫列表obj3.f() t o該變量obj3_calls
  • 分配主叫列表obj4.f()到可變obj4_calls

呼叫列表是,例如,當obj1.f()被調用時,的C1f方法被調用它調用的C1g方法。這可以表示爲調用形式['C1.f', 'C1.g']

我不太知道寫賦值語句的正確方法,我拼命地想幫我的朋友和她的東西的清單

如果你能告訴我如何正確地排除第一個賦值語句,我相信我可以找出其餘的。

+2

僅供參考,Stack Overflow的作業很好。家庭作業*沒有顯示*是問題。 – 2012-04-18 23:37:30

回答

0

關鍵的見解是,如果沒有爲類定義方法,它將默認使用該類繼承的類的方法。

因此,問問自己'obj2.f()'會做什麼。

  • 什麼班級是obj2這是C2
  • 是否有爲C2定義的f方法?是的,有。所以調用方法C2.f
  • C2.f方法調用self.g,這意味着它尋找C2.g是否有'C2.g'方法?不,所以我們必須去C2繼承的類。 class C2(C1)行告訴我們它從類C1繼承,所以它會調用方法C1.g

這些是獲取第一個呼叫列表的步驟;其餘的由你決定。