2017-03-31 192 views
0

我是Python新手,我有一個關於OOP的困境(我熟悉OOP概念)。
基本上,我有一個靜態類變量(counter,顯示有多少個對象我都實例化)類:Python OOP對象實例化

class Employee: 
    counter=0 
    def __init__(self,name): 
    self.name=name 
    Employee.counter+=1 

所以現在我實例化一個對象:

obj1=Employee("Alan") 

我的問題是:當我有這個電話會發生什麼?後面發生了什麼,因爲靜態變量「counter」增加了,但是可以訪問像這樣創建的對象嗎?

Employee("foo") 

<__main__.Employee object at 0x02A16870>

感謝

+0

'__init__'函數是你的構造函數,所以每當你創建一個新的'Employee對象時它就增加'counter'。你到底在問什麼? –

+0

您顯示的代碼不會運行。應該通過實例或類訪問'counter' –

+0

@MosesKoledoye:爲什麼不呢?哦,我現在看到......'counter + = 1'應該是'Employee.counter + = 1'。 –

回答

4

首先,你需要counter+=1Employee.counter += 1爲了使代碼的行爲像你說的它。否則,您將嘗試增加一個在__init__範圍內未知的變量。

由於您沒有提及Employee("foo")它很快就會被垃圾收集並且永遠消失。但是,這並不會改變Employee.__init__被稱爲增加您的counter的事實。

+0

是的,我忘了把Employee.counter + = 1。所以基本上,因爲現在有參考,垃圾收集器將釋放堆。謝謝你的解釋。 – distrobyte

1
Employee("foo") 

上面創建這個對象將隨着使用,並且不能被重新使用,而當你實例像

obj1=Employee("Alan") 

的對象必須在obj1一個該對象的參考,並儘快丟失它可以被重新使用。

我的問題當我有這個電話時會發生什麼?後面會發生什麼

__init__函數是構造函數,每次創建類的新對象時都會調用它。由於這個函數增加了計數器變量,因此每次創建一個對象時,都會調用__init__函數,並且計數器會遞增。