首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个实例中而不是在2个实例中覆盖内存

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

Stack Overflow用户
提问于 2016-04-03 05:26:17
回答 2查看 34关注 0票数 0

我试图为s1和s2创建两个实例,但是内存被写了两次。我得到:

代码语言:javascript
复制
     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?

我创建了一个类如下:

代码语言:javascript
复制
     class domain_monitor:
         name = '';
         tasks = [];

我开始按以下方式填充这些实例:

代码语言:javascript
复制
     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");

我将输出打印如下:

代码语言:javascript
复制
     for v in s1.tasks:   # 
       print v
     print " ========================================= "
     for v in s2.tasks:   # 
       print v
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-03 05:38:04

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

代码语言:javascript
复制
class domain_monitor:
    def __init__(self):
         self.name = ''
         self.tasks = []

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

票数 1
EN

Stack Overflow用户

发布于 2016-04-03 05:37:55

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

到目前为止

代码语言:javascript
复制
s1.tasks is s2.tasks
>>>True

在您添加:

代码语言:javascript
复制
def __init__(self, name, tasks):
    self.name = name
    self.tasks = tasks

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36381927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档