如何在Python中调用超类中的子类方法

zta*_*987 9 python

我想知道如何在超类中调用子类方法.

小智 12

我相信这是经常使用的模式.

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
Run Code Online (Sandbox Code Playgroud)

它有点像抽象类,但提供默认行为.但是不记得我头顶上的图案名称.


小智 9

子类背后的一点是它扩展改变了超类的行为.超类不知道 子类将如何扩展它.

编辑:但是,这是非常有可能的是,超知道,子类将扩展它.不确定,如果这是好的设计.


Tom*_*ski 5

这是我刚刚尝试过的:

class A(object):
    def x(self): 
        print self.y()

class B(A):
    def y(self): 
        return 1

>>> B().x()
1
Run Code Online (Sandbox Code Playgroud)

因此,除非您遇到一些特定问题,否则只需从基类中的子类调用一个方法,它就应该可以工作。

  • @Tichodroma 也许你不知道?假设“A”是一个基类,可以通过 3 或 4 种方式进行扩展。它不知道这些是如何实现的,只知道它们提供了哪个签名。我经常看到这样的事情,例如在“MySQLdb”中。 (4认同)
  • 我想知道为什么有人想这样做。为什么我要以现在预先知道“B”如何扩展它的方式来编写“A”? (2认同)

glg*_*lgl 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)
Run Code Online (Sandbox Code Playgroud)