我想知道如何在超类中调用子类方法。
答案 0 :(得分:11)
我相信这是经常使用的模式。
class A(object):
def x(self):
self.y()
def y(self):
print('default behavior')
class B(A):
def y(self):
print('Child B behavior')
class C(A):
def z(self):
pass
>>>B().x()
Child B behavior
>>>C().x()
default behavior
它有点像抽象类,但提供默认行为。但是,不能记住我头顶上的图案名称。
答案 1 :(得分:9)
子类背后的一点是它扩展并且改变了超类的行为。超类不能知道子类将如何扩展它。
编辑但超类很可能知道, 子类会扩展它。不确定,如果这是好的设计,那么。
答案 2 :(得分:3)
这是一个非常广泛的问题。由于您没有提供示例代码,我只会展示最简单的示例:
class A(object):
def meth1(self, a):
self.meth2(a, a*a)
class B(A):
def meth2(self, a, b):
return b / a
b = B()
b.meth1(10)
答案 3 :(得分:0)
以下是我刚试过的内容:
class A(object):
def x(self):
print self.y()
class B(A):
def y(self):
return 1
>>> B().x()
1
因此,除非您遇到一些特定问题,否则只需从基类中的子类调用一个方法,它就可以正常工作。
答案 4 :(得分:0)
我认为这与使用抽象方法有关。父类定义子类应实现的方法,父类知道将实现这些方法。例如,在Java中存在类似的结构。
这里很好地讨论了在Python中使用这些:Abstract methods in Python