在Python的父类中调用子方法

时间:2019-01-21 10:00:43

标签: python class inheritance polymorphism parent-child

注意:这与Calling a parent method in a child class .super()

无关。

我有3个课程,比如ParentChild1Child2Child1和2都具有方法Cry(),而Parent类具有另一种方法,例如MakeChildrenStopCry(),其中调用Cry()。但是,Parent类没有方法Cry()。我需要在Cry()类中定义Parent吗?

由于我没有父类的任何对象,而我始终使用子类,因此我仅创建了“空函数”,因为继承只会将这些空函数与Child类中的函数相抵消。

def MakeChildrenStopCry(self):
   if self.Cry():
    self.DoWhateverToStopCry(self)
def Cry(self)
   return()

有关完整的示例代码you can check this,但我认为上面的内容应该很清楚。

这不会在我的代码中引起任何问题,我只想知道正常执行的操作,或者以其他方式设置我的代码是否更好。

2 个答案:

答案 0 :(得分:2)

Python对此级别的程序员相当有信心。您始终可以从类中调用cry方法,即使未在类中定义它也是如此。 Python只会信任您提供一个知道cry方法的对象,如果该对象将被调用。

这很好:

class Parent:
    def makeChildrenStopCry(self):
        if self.cry():
            self.doWhateverToStopCry()

class Children(Parent):
    crying = False
    def makeCry(self):
        self.crying = True
    def doWhateverToStopCry(self):
        self.crying = False
    def cry(self):
        return self.crying

它提供了一个交互式会话:

>>> child = Children()
>>> child.makeCry()
>>> print(child.crying)
True
>>> child.makeChildrenStopCry()
>>> print(child.crying)
False

答案 1 :(得分:1)

如果父母有抽象方法怎么办?

class Parent:
    def cry(self):
        raise NotImplementedError

    def doWhateverToStopCry(self):
        raise NotImplementedError

    def makeChildrenStopCry(self):
        if self.cry():
            self.doWhateverToStopCry()

class Children(Parent):
    crying = False
    def makeCry(self):
        self.crying = True
    def doWhateverToStopCry(self):
        self.crying = False
    def cry(self):
        return self.crying