如何从超类调用方法,定义是否完全延迟到子类?

时间:2013-08-21 00:48:04

标签: python

我想在我的代码中调用一个supercass中的方法,在继续之前做一些特定于子类的处理。我最近从C#来到python ...在那里,我可能会使用一个界面。这是它的要点(正如我所描绘的那样,但它不起作用):

class superClass:
    def do_specific_stuff(self): #To be implemented entirely by the subclass, 
        #but called from the superclass
        pass

    def do_general_stuff1(self):
        #do misc

    def do_general_stuff2(self):
        #do more misc

    def main_general_stuff(self):
        do_general_stuff1()
        do_specific_stuff()
        do_general_stuff2()

我有一个相当复杂的实现;这个例子正是我所需要的,对于第一次观看者来说,理解起来就不那么痛苦了。目前拨打do_specific_stuff()会给我错误

'未定义全局名称'do_specific_stuff'。

当我在self.do_specific_stuff中添加'self'时,我收到错误

'TypeError:do_specific_stuff()获取0个位置参数,但是给出了1。任何接受者?提前谢谢......

1 个答案:

答案 0 :(得分:4)

需要

def main_general_stuff(self):
    self.do_general_stuff1()
    self.do_specific_stuff()
    ...

问题是你缺少对self的显式引用:Python认为你的意思是没有它的全局函数。请注意,Java中没有隐式this:您需要指定它。