python类继承顺序

时间:2018-01-24 09:53:06

标签: python inheritance declaration

我有一个文件test.py

class A(B):
  def display(self):
      print ("In A")

class B:
  def display(self):
    print ("In B")

运行时出现以下错误 回溯(最近一次调用最后一次):

File "/Users/praveen/Documents/test.py", line 1, in <module>
   class A(B):
NameError: name 'B' is not defined

但如果我改变声明的顺序,它会运行而没有任何错误

class B:
  def display(self):
    print ("In B")

class A(B):
  def display(self):
      print ("In A")

任何人都可以详细解释为什么会发生这种奇怪的错误吗?

2 个答案:

答案 0 :(得分:3)

这是因为python被解释为Top-To-Bottom。在第一个示例中定义class A(B)的行中,python尚未读取class B

在第二个示例中,行B中已知class A(B)。这就是它运行的原因。

答案 1 :(得分:2)

简单:当python评估class A(B):时B仍未定义,

遗憾的是,python没有类原型(或前向声明)

但如果您有2个明确需要指向彼此的类,这只是一个问题。