防止实例之间共享类数据
在面向对象编程中,为类的不同实例维护不同的数据至关重要。但是,默认情况下,类级变量在所有实例之间共享,这可能会导致意外行为。
理解问题
考虑以下代码:
class a: list = [] x = a() y = a() x.list.append(1) y.list.append(2) x.list.append(3) y.list.append(4) print(x.list) # prints [1, 2, 3, 4] print(y.list) # prints [1, 2, 3, 4]
两个实例共享相同的列表,而不是获取 x 和 y 的单独列表。发生这种情况是因为 list 被声明为类变量,因此所有实例都引用相同的底层对象。
解决方案:实例变量
为了避免共享数据,实例变量应该被利用。实例变量在类的构造函数 (__init__) 中定义。下面是更正后的代码:
class a: def __init__(self): self.list = [] x = a() y = a() x.list.append(1) y.list.append(2) x.list.append(3) y.list.append(4) print(x.list) # prints [1, 3] print(y.list) # prints [2, 4]
在这种情况下,为构造函数中的每个实例初始化列表属性,创建单独的副本。现在,打印语句通过 x 和 y 的不同列表准确地反映了预期行为。
以上是如何防止 Python 中的对象实例之间共享类数据?的详细内容。更多信息请关注PHP中文网其他相关文章!