我有一个文件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")
任何人都可以详细解释为什么会发生这种奇怪的错误吗?
答案 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个明确需要指向彼此的类,这只是一个问题。