Python メンバー変数の共有
最近pythonを勉強のために使っているのですが
納得のいかないことがあったのでメモしておきます。
class a: name = '' l = [] def __init__(self, name): self.name = name def Print(self): print name + ":" for o in l: print str(o) + " " hoge = a('hoge') piyo = a('piyo') hoge.l.append(1) hoge.l.append(2) piyo.l.append(9) hoge.Print() piyo.Print()
上記の出力が
hoge :1 2 9
piyo :1 2 9
となっていてメンバー「l」のインスタンスが
クラス変数として扱われている状態になり大変困りました。
クラス宣言時のコードを以下のように修正すると解決しました。
class a: name = '' def __init__(self, name): self.name = name self.l = [] # ここ******** def Print(self): print name + ":" for o in l: print str(o) + " "
これはリストや自作のクラスインスタンスでのみ発生し
C++などでの経験上ではコードに間違いも見当たらず大変困りました。
(pythonの基礎をやらずに書いているせいなのはわかっています。)
検索しても英語のページしか同じようなことを書いているところを見つけれなかったので
今後いろいろ調べていく上で納得していくんだろうと思いますが
今のところすごくもやもやしています。