【问题标题】:Python inheritancePython继承
【发布时间】:2012-04-18 23:34:04
【问题描述】:

我的基本代码如下所示:

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()时,调用C1f方法,该方法调用C1g方法。这可以表示为['C1.f', 'C1.g']

形式的调用列表

我不太清楚写作业语句的正确方法,我非常想帮助我的朋友处理她的事情。

如果你能告诉我如何正确地纠正第一个赋值语句,我相信我能弄清楚其余的。

【问题讨论】:

  • 仅供参考,Stack Overflow 上的家庭作业很好。家庭作业没有表现出任何努力是问题所在。

标签: python class inheritance methods


【解决方案1】:

关键的见解是,如果没有为类定义方法,它将默认使用该类继承的类的方法。

因此,问问自己 'obj2.f()' 会做什么。

  • obj2是什么类?C2
  • 是否为 C2 类定义了 f 方法? 是的,有。所以调用了C2.f方法。
  • C2.f 方法调用self.g,这意味着它寻找C2.g有 'C2.g' 方法吗? 没有,所以我们必须转到 C2 继承的类。 class C2(C1) 这行告诉我们它继承自类C1,所以它会调用方法C1.g

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2020-07-19
    相关资源
    最近更新 更多