如何在Python中调用超类中的子类方法
我想知道如何在超类中调用子类方法。这是一个非常广泛的问题。由于您没有提供示例代码,我将只显示最简单的示例:如何在Python中调用超类中的子类方法,python,Python,我想知道如何在超类中调用子类方法。这是一个非常广泛的问题。由于您没有提供示例代码,我将只显示最简单的示例: 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) 子类背后的要点是它扩展并改变了超类的行为。超类不知道子类将如何扩展它 编辑:但超类很可能知道子类将
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)
子类背后的要点是它扩展并改变了超类的行为。超类不知道子类将如何扩展它
编辑:但超类很可能知道子类将扩展它。不确定这是否是一个好的设计。以下是我刚刚尝试过的:
class A(object):
def x(self):
print self.y()
class B(A):
def y(self):
return 1
>>> B().x()
1
因此,除非您遇到一些特定的问题,否则只需从基类中的子类调用一个方法,它就可以正常工作。我认为这与使用抽象方法有关。父类定义子类应该实现的方法,父类知道这些方法将被实现。类似的结构存在于Java中
这里很好地讨论了在Python中使用这些模式:我相信这是一种经常使用的模式
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
它有点像一个抽象类,但提供了默认行为。但是,我记不起头顶上图案的名称。a来自哪里?方法在哪里?@Tichodroma对不起,是我的错。应该边写边思考;-)现在更正。如果这些类在单独的模块中怎么办?i、 e.file2.py导入file1类TestCase(file1.TestBase):def execute(self):self.pass()file1.py类TestBase:def pass(self):打印“pass”TestBase=TestBase()TestBase.execute()@ThePracticalOne难以读取,但在您的情况下,根本不使用
file2.py
。如果您执行testcase=testcase()
和testcase.execute()
,它应该可以工作。我想知道为什么有人想这样做。为什么我要以我事先知道的方式编写A
,B
将如何扩展它?@Tichodroma:是的,这里有一些代码的味道。但可能是因为,例如,OP的讲师与现实脱节;)@蒂乔德罗马也许你不知道?让A
作为一个基类,可以用3或4种方式进行扩展。它不知道这些是如何实现的,只知道它们提供了哪些签名。我经常看到这样的事情,例如在<代码> MySQL LD> <代码>。我错过了一些事情,但是这两个GLGGL回答都是从OP所要求的子类调用超类方法吗?非常感谢……这正是我所希望的,你可以更明确地用你的问题。C++语言只是多态性。但对于Python来说,这对任何事情都是正确的。。。