素材牛VIP会员
Python怎么避免不同的实例之间共享变量?
 wj***37  分类:Python  人气:511  回帖:3  发布于6年前 收藏

如下定义一个类,成员变量是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等等类型的)被不同实例共享,应该怎么做?难道只能用基本数据类型作为成员变量吗?

 标签:实例化python

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv1 新人
海***人 Web前端工程师 6年前#1

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

试试这个

def A(object):
    def __init__():
        self.value = [ ]
    def append(v):
        self.value.append(v)
Lv3 码奴
ji***ui 软件测试工程师 6年前#2
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()
Lv7 码师
这***人 JS工程师 6年前#3

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

实例变量是要在`__init__(self)`中定义的变量。如果没有定义变量,那就会搜索scope上同名变量。
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取