传承麻烦. – Python
有人在这个网站上遇到了同样的问题,但答案与我遇到的问题无关. 请考虑以下类定义.
对于这个问题,您需要考虑调用f方法时调用哪些方法.因此,例如,当调用obj1.f()时,调用C1的f方法,该方法调用C1的g方法.这可以表示为表单的“调用列表”
写三个赋值语句,分别将obj2.f()的’调用列表’赋给变量obj2_calls,将obj3.f()的’调用列表’赋给变量obj3_calls,并为obj4分配’调用列表’ .f()到变量obj4_calls. 我理解第一项任务没有问题,它是obj2_calls = [‘C2.f’,’C1.g’] 只是为了清理,这是IS的功课 最佳答案
这与您班级的方法解析顺序(MRO)有关. (有关一些有用信息,请参阅here)
正如你所说的那样,没有C3.f函数,所以python在MRO中的第一个基类上查找f方法,该方法已经定义了f.在这种情况下,即(C1).现在,该方法(C1.f)调用self.g().在这种情况下,self是C3的一个实例,因此当然,self.g调用C3.g,因为这是MRO中最高的g函数.如果你想保证你得到C1.g,你需要明确地做到:
这也是讨论双下划线名称修改的一个很好的引导.由于这是一个单独的主题,也许最好只留下link to some useful documentation. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |