【问题标题】:In what ways can the interpreter leave a class definition?解释器可以通过哪些方式留下类定义?
【发布时间】:2016-05-02 01:11:37
【问题描述】:

我对以下陈述很感兴趣:

当一个类定义正常离开时(通过结尾),一个类对象被创建。 (来自Python tutorial

类定义可以通过哪些其他方式“保留”?我可以想到一个SyntaxError。还有其他方法吗?

【问题讨论】:

  • 任何其他例外。

标签: python class python-3.x


【解决方案1】:

这是另一种方式:

>>> 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

【讨论】:

  • 当然!我在想class 块中的任何内容只有在我实际构建类的实例时才会执行。但不是函数定义的语句会立即执行。
【解决方案2】:

我相信短语“当类定义正常保留时(通过结尾)”是指 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 编译器会遍历您的代码以构建对象和类定义的索引,这些定义将在您的程序运行时使用(通常称为“符号表”)。当它到达class Foo 时,它开始将以下行解释为Foo 的类定义,直到到达最后一个缩进行并且编译器此时Foo 现在是我们索引中定义的符号,Python 继续前进运行程序的其余部分。

【讨论】:

    猜你喜欢
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2011-11-14
    • 2012-06-03
    相关资源
    最近更新 更多