2012-04-18 96 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

这些是获取第一个呼叫列表的步骤;其余的由你决定。