成员变量在多个对象之间共享-Python

时间:2018-09-06 21:11:14

标签: python python-2.7 class oop

我创建了一个用于存储一些变量和字典的类。每个对象都有自己的字典。但是,当我以某种方式创建类时,它导致字典在所有创建的对象之间共享。     调整 init 后,我能够实现自己想要的目标。我想知道为什么字典在不同的对象之间共享以及何时和我会有用。

代码段1:(在其中填充字典并在所有对象实例之间共享的地方)

class A(object):
    def __init__(self, x, y={}):
        self.x = x
        self.y = y

    def set_y(self,key,value):
        self.y[key] = value

代码段2 :(其中字典值是唯一的,并且不在成员实例之间共享)

   class A(object):
        def __init__(self,x):
            self.x = x
            self.y = {}

        def set_y(self,key,value):
            self.y[key] = value

测试驱动程序

l = "abcdefghijklmnopqrsqtuwxyz"
letter_list = []
node = None
for count, letter in enumerate(l,1):
    if node:
        letter_list.append(node)
    node = A(letter)
    node.set_y(letter,count)

我想知道为什么字典在第一种情况下而不是第二种情况下针对所有实例进行更新

1 个答案:

答案 0 :(得分:1)

由于您在__init__构造函数中使用默认值的方式,字典已更新。在第一种情况下,空字典是单个对象;它不是每个新对象的唯一构造函数。当定义了类时,它将得到评估,并且 same dict对象位于每个实例化的新对象那里。很简单,这行

def __init__(self, x, y={}):
在定义函数时,在类定义期间,

一次执行

在第二种情况下,初始化self.y = {}在函数的主体中,因此每次实例化新对象时都将执行初始化。您可以在this canonical posting中找到有关该主题的详细说明。