【发布时间】:2016-05-02 01:11:37
【问题描述】:
我对以下陈述很感兴趣:
当一个类定义正常离开时(通过结尾),一个类对象被创建。 (来自Python tutorial)
类定义可以通过哪些其他方式“保留”?我可以想到一个SyntaxError。还有其他方法吗?
【问题讨论】:
-
任何其他例外。
标签: python class python-3.x
我对以下陈述很感兴趣:
当一个类定义正常离开时(通过结尾),一个类对象被创建。 (来自Python tutorial)
类定义可以通过哪些其他方式“保留”?我可以想到一个SyntaxError。还有其他方法吗?
【问题讨论】:
标签: python class python-3.x
这是另一种方式:
>>> 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 块中的任何内容只有在我实际构建类的实例时才会执行。但不是函数定义的语句会立即执行。
我相信短语“当类定义正常保留时(通过结尾)”是指 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 继续前进运行程序的其余部分。
【讨论】: