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

How to call subclass methods in a superclass in Python

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


我相信这是一个经常使用的模式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
2
3
4
5
6
7
8
9
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)


我认为这与使用抽象方法有关。父类定义子类应该实现的方法,父类知道将实现这些方法。类似的结构存在于Java中。

在python中使用这些将在这里讨论:python中的抽象方法


以下是我刚试过的:

1
2
3
4
5
6
7
8
9
10
class A(object):
    def x(self):
        print self.y()

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

>>> B().x()
1

所以,除非您有一些特定的问题,否则只需从基类的子类中调用一个方法,它就可以工作了。