2011-10-24 34 views
10

我對python相對較新 我想爲一個類只運行一段代碼。像java中的靜態塊一樣。python中是否存在靜態塊

爲如:

class ABC: 
    execute this once for a class. 

是否有蟒蛇可用的任何這樣的選項?

在java中,我們這樣寫。在班級加載時,這隻對一個班級執行一次。不是每個對象創建

public class StaticExample{ 
    static { 
     System.out.println("This is first static block"); 
    } 
} 

感謝

+1

你不想把你的代碼放在'__init__'函數中嗎? –

+2

我猜不。 __init__在每個對象創建時被調用。我需要它只執行一次。 –

+1

@ root45:每個* instance *會被調用一次。 M S正在要求每個班級調用一次。 – Crisfole

回答

9

要做到這一點只要把代碼直接在類定義下(與該類的函數定義並行)

直接在類中的所有代碼在t中創建該類型時執行他班級的名字空間。例如:

class Test: 
    i = 3 
    y = 3 * i 
    def testF(self): 
     print Test.y 

v = Test() 
v.testF() 
# >> 9 

只需填寫信息的最後一位爲你:你的方法函數def s的也正在執行(就像他們獲得「執行」當你定義在全局命名空間的功能),但他們不叫。恰好是執行def沒有明顯的結果。

Python的面向對象的方法相當聰明,但需要一點時間來解決它!保持它,這是一個非常有趣的語言。

+0

謝謝,這有幫助。 –

+0

請勿使用self.y使用訪問靜態變量/類變量。至少使用Test.y而不是 – Artur

+0

呵呵,從來沒有注意到我做到了。固定。 – Crisfole

5
>>> class MyClass(): 
...  print "static block was executed" 
... 
static block was executed 
>>> obj = MyClass() 
>>> 

在這裏看到有關靜態變量/函數在Python的更多信息:Static class variables in Python

+0

謝謝,這有助於。 –

相關問題