は?
本当に「は?」っていう感じでいまさらなのですが...
検証コード
問題のコード
# -*- coding: utf-8 -*-
class Hoge():
def __init__(self, data=[]):
self.data = data
def add_data(self):
self.data.append(u"ʅ(´◔౪◔)ʃ")
if __name__ == "__main__":
hoge = Hoge()
hoge.add_data()
hoge2 = Hoge()
print hoge2.data[0]
実行すると、ʅ(´◔౪◔)ʃ
が表示されます。
???????
以下のようにするとhoge2にdataは引き継がれない
# -*- coding: utf-8 -*-
class Hoge():
def __init__(self):
self.data = []
def add_data(self):
self.data.append(u"ʅ(´◔౪◔)ʃ")
if __name__ == "__main__":
hoge = Hoge()
hoge.add_data()
hoge2 = Hoge()
print hoge2.data
さらに、リストではなく文字列を入れるようにするとコンストラクタに引数を入れても引き継がれなかった
# -*- coding: utf-8 -*-
class Hoge():
def __init__(self, data=''):
self.data = data
def add_data(self):
self.data = u"ʅ(´◔౪◔)ʃ"
if __name__ == "__main__":
hoge = Hoge()
hoge.add_data()
hoge2 = Hoge()
print hoge2.data
なぜだ...
コンストラクタの引数にデフォルト値を入れるとなぜかインスタンス変数を引き継ぐ?
原因はわからないけど、気をつけます。
原因を知っている方はコメントいただけると幸いです