python class继承顺序

python class inheritance order

我有一个文件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")

谁能详细解释为什么会出现这个奇怪的错误?

发生这种情况是因为 python 被从上到下解释。在第一个示例中定义 class A(B) 的行中,class B 尚未被 python 读取。

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

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

不幸的是 python 没有 class 原型(或前向声明)

但这只是一个问题,如果您有 2 个 class 明确需要相互指向。