解释器在哪些方面可以留下类定义?

时间:2016-05-02 01:11:38

标签: python class python-3.x

我对以下声明很感兴趣:

  

当正常保留类定义(通过结尾)时,会创建一个类对象(来自Python tutorial

在课程定义的其他方面可以留下"?我能想到SyntaxError。还有其他方法吗?

2 个答案:

答案 0 :(得分:2)

这是另一种方式:

>>> class A:
...     x = y
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in A
NameError: name 'y' is not defined

答案 1 :(得分:0)

我相信短语&#34;当一个类定义正常(通过结尾)&#34;指的是Python在编译的第一阶段如何构建对象类定义。

假设您声明了一个类:

# <--- `Foo` is NOT defined as a class object in this context

class Foo:
  def say_hello(self):
    # Whatever
    pass

  # <--- Interpreter leaves class declaration here

# <--- `Foo` is now defined as a class object in this context

type(Foo)  # Returns `<type 'classobj'>`

在您实际执行程序之前,Python编译器会通过您的代码来构建将用作程序运行的对象和类定义的索引(通常称为&#34;符号表&#34 )。当它达到class Foo时,它开始将以下行解释为Foo的类定义,直到到达最后一个缩进行,并且编译器点Foo现在是我们索引中的已定义符号并且Python继续运行你的程序的其余部分。