C'est vraiment comme "Quoi?"
Code en question
# -*- 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]
Lorsqu'il est exécuté, ʅ (´◔౪◔) ʃ
s'affiche.
???????
Si vous procédez comme suit, les données ne seront pas héritées par hoge2
# -*- 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
De plus, si vous mettez une chaîne au lieu d'une liste, elle ne sera pas héritée même si vous mettez un argument dans le constructeur.
# -*- 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
Pourquoi... Pourquoi la variable d'instance prend-elle le relais lorsque la valeur par défaut est entrée dans l'argument du constructeur?
Je ne connais pas la cause, mais fais attention. Si vous connaissez la cause, je vous serais reconnaissant si vous pouviez commenter.
Recommended Posts