2011-10-24 10 views
10

私は比較的新しいPythonです 私はクラスのコードブロックを1回だけ実行したいと思います。 Javaの静的ブロックと同様です。例えばのためのPythonのクラスに静的ブロックがあります

class ABC: 
    execute this once for a class. 

のpythonで利用可能な任意のそのようなオプションはありますか?

Javaでは、このように記述します。これは、クラスがロードされた時点で、クラスに対して1回だけ実行されます。すべてのオブジェクトを作成するため

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

おかげ

+1

あなたのコードを '__init__'関数に入れたくありませんか? –

+2

私はそうは思いません。 __init__は各オブジェクトの作成時に呼び出されます。私はそれを一度だけ実行する必要があります。 –

+1

@ root45:クラスの*インスタンス*ごとに1回呼び出されます。 M Sはクラスごとに一度呼び出されるものを求めています。 – Crisfole

答えて

9

これを行うには、単に直接クラス定義の下でコードを置きます(クラスの関数定義に平行)

クラス内のすべてのコードは、その型の作成時に実行されます彼はクラスの名前空間です。例:

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

ありがとう、これは役立ちます。 –

関連する問題