pythonマルチスレッドノート(6)--閉パッケージ

1331 ワード

クラスに閉じ込める
 
多くの資料では、クラス内部の変数は2つあると言われています.
定義された場所によってinit__上の和_init__下の
メモリの位置、分類、インスタンス、または共通およびプライベート
 
次に、クラスにインスタンスの個数を保存する変数xを定義します.
>>> class Foo:
. . . x = 0
. . .   def __init__(self):
. . .       self.x += 1
. . .       print(self.x)

>>> f1 = Foo()
1
>>> f2 = Foo()
1
>>> Foo.x
0

 
明らかに、結果は考えと合わない.
ここで、各インスタンスのxはプライベートであり、クラスのxはずっとゼロである!
 
 
 
考えを変えて、xをリストに定義して、見てみましょう.
>>> class Bar:
. . .   x = [0]
. . .   def __init__(self):
. . .       self.x[0] += 1
. . .       print(self.x[0])

>>> b1 = Bar()
1
>>> b2 = Bar()
2
>>> Bar.x[0]
2

あ、ええ、いいですよ.xがオブジェクトなので、メモリスペースのアドレスが固定されています(この言い方はあまり適切ではありませんが、理解してください).