我有TestData
类,我想在其中存储time, x, y
信息
然后我有一个GenericData
类,其中我想要两个TestData
实例保存为left
和right
我实例化GenericData
并向左边的实例附加一个值,但右边的实例也会更新
这意味着当我调用generic = GenericData(TestData(), TestData())
时,两个TestData()
调用是实例化同一个对象
如何在GenericData
内实例化两个不同的TestData
,以便独立地更新它们
class GenericData:
def __init__(self, left, right):
self.left = left
self.right = right
class TestData:
def __init__(self, t=[], x=[], y=[]):
self.t = t
self.x = x
self.y = y
generic = GenericData(TestData(), TestData())
generic.left.t.append(3)
print(generic.left.t)
print(generic.right.t)
[3]
[3] <-- This one should be empty!
GenericData
的left
和right
成员是两个不同的对象,但它们共享作为TestData
定义中默认参数创建的相同列表实例因此,您应该避免可变的默认参数
改变这个
为了这个
通常,当我们使用列表或字典作为函数的默认参数时,我们希望程序在每次调用函数时都创建一个新的列表或字典。然而,Python并不是这样做的。第一次调用函数时,Python会为列表或字典创建一个持久对象,因为Python中的函数是一级对象。以后每次调用函数时,Python都会使用第一次调用函数时创建的持久对象
引用:https://effbot.org/zone/default-values.htm
相关问题 更多 >
编程相关推荐