覆盖1个实例而不是2个内存

时间:2016-04-03 05:26:18

标签: python object data-structures instance

我试图为s1和s2创建2个实例,但内存会被写入两次。 我明白了:

     Out of the World
     Book: Decision Procedure
      =========================================
     Out of the World
     Book: Decision Procedure

instead of
     Out of the World
      =========================================
     Book: Decision Procedure

How is this so?

我创建了一个类如下:

     class domain_monitor:
         name = '';
         tasks = [];

我开始按如下方式填充实例:

     s1 = domain_monitor();
     s1.name = "s1";
     s1.tasks.append("Out of the World");


     s2 = domain_monitor();
     s2.name = "s2";
     s2.tasks.append("Book: Decision Procedure");

我打印输出如下:

     for v in s1.tasks:   # 
       print v
     print " ========================================= "
     for v in s2.tasks:   # 
       print v

2 个答案:

答案 0 :(得分:2)

您必须将__init__()方法添加到domain_monitor,否则您的所有实例都会共享相同的nametasks

到目前为止,你有

s1.tasks is s2.tasks
>>>True

添加:

def __init__(self, name, tasks):
    self.name = name
    self.tasks = tasks

所有实例都有不同的属性。

答案 1 :(得分:1)

class定义中tasks是一个静态属性,这意味着它将跨实例共享。您应该使用定义__init__方法来初始化对象属性。例如:

class domain_monitor:
    def __init__(self):
         self.name = ''
         self.tasks = []

顺便说一下,根据PEP8,类名必须在CamelCase,因此DomainMonitor是更好的选择。