我遇到了对象问题。
以下代码
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中第二次似乎旧的Data对象仍然存在,尽管它在私有变量中。
如何更改代码以便创建新对象?
答案 0 :(得分:10)
使用[]
作为函数的默认参数只会创建一次列表,并在每次调用时重复使用此列表。有关说明,请参阅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)
这可以解决您的问题。