0

让我们看一下下面的例子:

>>> class Foo(object):
...     pass
... 

我目前的理解是当 Python 解释器读取class Foo(object)[Foo 类定义] 行时,它会在内存中创建一个 Foo 类对象。

然后我做了以下两个测试:

>>> dir()
['Foo', '__builtins__', '__doc__', '__name__', '__package__']

看起来 Python 解释器已将“Foo”类对象存储在内存中。

>>> id(Foo)
140608157395232

似乎 Foo 类对象位于内存地址:140608157395232。

我的推理正确吗?如果没有,Python 什么时候在内存中创建类对象?

4

3 回答 3

5

更具体地说,Python 在完成对整个pass类定义的处理后创建类类型对象(因此,在您的示例中, 它在解析和处理该行之前不会创建它)。

这通常只与深奥的边缘情况相关,如下所示:

>>> class Foo(object):
...     print repr(Foo)
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in Foo
NameError: name 'Foo' is not defined

但是,是的,您的推理通常是正确的。

于 2013-08-06T05:14:27.957 回答
1

类对象是由行创建的class Foo(object):,是的。它不是在读取该行时创建的,而是在到达类定义的末尾时创建的。

类的id不需要与内存地址有任何关系。这是一个实现细节,你没有任何用处。

于 2013-08-06T05:13:28.523 回答
0

在读取或导入时创建类对象,而不是实例,并且此时创建任何静态类方法。

class.__init__()当您分配该类类型的对象时,将创建并执行一个类实例。

只是为了使事情复杂化,另一个类可能具有您的类的静态成员,因此可以在它自己的声明时间创建一个实例。

于 2013-08-06T05:17:16.943 回答