#python
#python
Вопрос:
У меня проблема с объектами.
Следующий код
class Data:
def __init__(self,data=[]):
self.data = data
def add(self,data):
self.data.extend(data)
class Parent:
def testa(self):
a = Data()
a.add('a')
print a.data
def testb(self):
b = Data()
b.add('b')
print b.data
if __name__ == "__main__":
p = Parent()
p.testa()
p.testb()
Генерирует следующий вывод:
[]
['a']
['a']
['a', 'b']
Почему не создан новый объект? Во второй раз в testb кажется, что старый объект данных все еще существует, хотя он был в частной переменной.
Как я могу изменить код, чтобы создать новый объект?
Комментарии:
1. Не забудьте принять ответ, который подходит вам, нажав на зеленую галочку.
Ответ №1:
Использование []
в качестве аргумента функции по умолчанию создаст список только один раз и повторно использует этот список при каждом вызове. См http://docs.python.org/tutorial/controlflow.html#default-argument-values для объяснения. Таким образом, оба Data
объекта совместно используют список, на который ссылается их self.data
член!
Вы должны изменить свой код следующим образом:
class Data:
def __init__(self, data=None):
if data is None:
data=[]
self.data = data
def add(self, data):
self.data.extend(data)
Это должно решить вашу проблему.
Комментарии:
1. @BartVanherck, если это решит вашу проблему, вы должны пометить этот ответ как решение.