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

Overwriting memory in 1 instance instead of 2

我尝试为 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 如下:

     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

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

到目前为止你有

s1.tasks is s2.tasks
>>>True

添加后:

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

所有实例都有单独的属性。

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

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

顺便说一下,根据 PEP8,class 个名字必须在 CamelCase 中,所以 DomainMonitor 是更好的选择。