※ ChatGPTを利用し、要約された質問です(原文:Python のクラスのメンバ変数)
Pythonのクラスのメンバ変数とは?
このQ&Aのポイント
Pythonのクラスのメンバ変数について説明します。
メンバ変数は、クラス内で使用される変数のことです。
コンストラクタで初期化しなくても、正常な値になりますが、オブジェクトや配列の場合は注意が必要です。
class foo( object ):
__result = []
def __init__( self, n, m ):
# self.__result = []
self.__result.append( n + m )
def func( self ):
print self.__result[0]
hoge = foo( 1, 2 )
fuga = foo( 3, 4 )
hoge.func() # 3
fuga.func() # 3 ... !?
数値や文字列といったメンバ変数は、コンストラクタで意図的に初期化してやらなくても正常な値になりますが、それ以外のオブジェクトや配列だと fuga は hoge のメンバと同じものになってしまいます。他の言語の感覚ですと、__result は foo のメンバな上にプライベートなので、fuga の __result が hoge.__result を指すのは考えられない事なのですが、この書き方がマズいのでしょうか。
また、もしこのようになっている理由等もありましたら、併せてお教えください。
お礼
ありがとうございます。まさに,おっしゃるとおりクラス変数/インスタンス変数という仕組みがある事を知らない事が敗因でした。また一つ勉強になりました。 # 複数のインスタンスからシームレスにアクセス可能なクラス変数の有用性を理解しつつも,変数のスコープやメンバ変数の記述性など,もっと根本的な記述性に疑問符が残りつつもありますが :D