何时创建python类属性

时间:2013-09-25 12:15:50

标签: python

class Foo:
   bar = 1
   ......etc.

我知道在创建实例时,会在__init__之前创建一个条, 我想知道在创建时是否首先创建bar属性 Foo的一个实例。 此外,在创建任何实例之前,条形图是否已存在于内存中?

3 个答案:

答案 0 :(得分:6)

请记住,在Python中class是一个可执行语句(defimport也是如此)。因此,您的问题的答案是bar语句执行时创建class

具体来说,当执行class语句时,类的主体在名称空间中执行,该名称空间通常只是dict。当主体完成执行时,会创建一个类对象,并将结果dict的副本作为类的__dict__属性。 此时的dict包含例如在类体bar=1内绑定的所有名称,但也包含在类体中定义的所有函数。

实例在创建时,不会获得bar的副本,它们只会引用该类。当您在实例上查找名称时,Python会查看实例的__dict__和类的__dict__

答案 1 :(得分:0)

这些属性存储在类本身的__dict__中。他们从不存在于实例上(或者更确切地说是实例的__dict__),除非您手动分配它。

例如,如果您在方法中使用self.bar += 1,则从类级变量中读取 1并将2分配给实例级变量。下次运行此语句时,实例级别上存在bar,因此您读取2并将其替换为3

答案 2 :(得分:0)

状态变量将在构造函数( init )之前分配。所以......

    Class Foo:
        bar = 1
        def __init__(self):
            bartwo = 2
但是,在分配bartwo之前,

会看到条形值为1。我的猜测是你的问题是“如果我在构造函数之前分配一个状态变量,我可以在构造函数中使用它。是的。