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

现在我的问题如下:我需要编写三个赋值语句来执行以下操作:

  • 调用列表分配给obj2.f()变量obj2_calls
  • 调用列表分配给obj3.f()变量obj3_calls
  • 调用列表分配给obj4.f()变量obj4_calls

调用列表例如,当obj1.f()被调用时,调用的f方法C1调用的g方法C1。这可以表示为表单的调用列表['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 回答