注意:这与Calling a parent method in a child class .super()
无关。我有3个课程,比如Parent
,Child1
和Child2
。 Child1
和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,但我认为上面的内容应该很清楚。
这不会在我的代码中引起任何问题,我只想知道正常执行的操作,或者以其他方式设置我的代码是否更好。
答案 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