したがって、静的クラスメンバーを使用しているので、クラスメソッドと同じクラスの静的メソッドの間でデータを共有できます(クラスのインスタンス化は1つだけです)。私はこれをうまく理解していますが、静的メンバーがいつ初期化されるのか疑問に思っていますか?輸入中ですか?クラスの最初の使用時に?このクラスの静的メンバーを複数のモジュール(したがって、複数のimportステートメント)から呼び出すためです。静的メソッドにアクセスするすべてのモジュールは、同じ静的データメンバーを共有しますか?また、メインクライアントがクラスのインスタンスを削除してから(完全に終了したり、ものを再インポートしたりせずに)再作成した場合、データメンバーは保持されますか?
13153 次
1 に答える
15
これらはクラス定義時に初期化されます。これは、モジュールの一部としてクラスをインポートする場合、インポート時に発生します。これは、次のような「静的」クラスメンバー定義スタイルを想定しています。
class Foo:
bar = 1
print Foo.bar # prints '1'
これは静的クラスメンバーであるため、クラスをインスタンス化する必要がないことに注意してください。
importステートメントは、モジュールが何度実行されたか、どこで実行されたかに関係なく、モジュールの内容を1回だけ実行します。
はい、静的メンバーは、それらにアクセスするすべてのコードによって共有されます。
はい、そのクラスのタイプのオブジェクトを削除すると、クラスの静的メンバーは保持されます。
# Create static member
class Foo:
bar = 1
# Create and destroy object of type Foo
foo = Foo()
del foo
# Check that static members survive
print Foo.bar # Still prints '1'
于 2010-08-17T19:31:49.263 に答える