class Foo:
bar = 1
......etc.
我知道,當創建一個實例,酒吧創建__init__
之前, 我想知道這是否是創造 Foo的一個實例時創建欄屬性的第一件事。 此外,在任何實例創建之前,條形圖是否已經存在於內存中?當是Python類屬性創建
class Foo:
bar = 1
......etc.
我知道,當創建一個實例,酒吧創建__init__
之前, 我想知道這是否是創造 Foo的一個實例時創建欄屬性的第一件事。 此外,在任何實例創建之前,條形圖是否已經存在於內存中?當是Python類屬性創建
請記住,在Python class
是一個可執行語句(如太是def
和import
)。因此,在回答你的問題是,class
語句執行時bar
創建。
具體來說,class
語句執行的時候,班裏的身體的命名空間中,通常只是一個dict
。在執行時,身體已經結束執行一個類對象的時候會產生一個dict
的副本,作爲__dict__
屬性的c姑娘。 此處的字典包含所有在類主體bar=1
內部綁定的名稱,但也包含在類體中定義的所有函數。
實例在創建時不會獲得bar
的副本,只會引用該類。在實例上查找名稱時,Python會在實例的__dict__
和該類的__dict__
中查找。
對我來說是一個完美的答案。謝謝鄧肯 –
這些屬性存儲在類本身的__dict__
中。他們從來沒有存在於實例(或者實例的__dict__
)上,除非您手動分配它。
例如,如果你在一個方法使用self.bar += 1
你從類級變量讀的1
並分配2
的實例級變量。下次運行此語句時,實例級別上存在bar
,因此您讀取了2
並將其替換爲3
。
那麼,我主要好奇,當酒吧財產了內存,在任何實例創建之前? –
當然,這是班上的一部分。 – ThiefMaster
狀態變量將在構造函數之前分配(初始值)。所以...
Class Foo:
bar = 1
def __init__(self):
bartwo = 2
雖然在bartwo被分配之前,會看到bar取值爲1。我的猜測是你的問題是:「如果我一個構造函數之前指定一個狀態變量,我可以用它在構造函數中。是的。
http://docs.python.org/2/reference/datamodel.html通常值得閱讀,當涉及到這樣的事情。 – ThiefMaster