Python怎么避免不同的实例之间共享变量?

如下定义一个类,成员变量是mutable的

class MyClass:
    __value = []
    def append(self,value):
        __value.append(value)
    def get(self):
        return self.__value

然后实例化

instance_a = MyClass()
instance_b = MyClass()
instance_a.append(100)
print instance_b.get()  #结果输出了 [100],说明成员变量在不同实例间被共享

现在我不想变量(list,dict等等类型的)被不同实例共享,应该怎么做?难道只能用基本数据类型作为成员变量吗?

阅读 8.7k
3 个回答

你所声明的是类变量而非成员变量,也就是说你的value是绑定到类型的,而不是实例上。

试试这个

def A(object):
    def __init__():
        self.value = [ ]
    def append(v):
        self.value.append(v)
class MyClass():
    def __init__(self):
        self.value=[]
    def append(self,value):
           self.value.append(value)
    def get(self):
           return self.value
instance_a=MyClass()
instance_b=MyClass()
instance_a.append(100)
print instance_b.get()
print instance_a.get()

题主可以看看这个:https://www.zhihu.com/question/25874136
关于静态变量、实例变量的讲解。
至于具体如何操作,上面两个答案已经很清楚的列出来了。

实例变量是要在`__init__(self)`中定义的变量。如果没有定义变量,那就会搜索scope上同名变量。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题