我试图为s1和s2创建两个实例,但是内存被写了两次。我得到:
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发布于 2016-04-03 05:38:04
在class定义中,tasks是一个静态属性,意味着它将在实例之间共享。您应该使用定义一个__init__方法来初始化对象属性。例如:
class domain_monitor:
def __init__(self):
self.name = ''
self.tasks = []顺便说一句,根据CamelCase,类名必须在PEP8中,所以DomainMonitor是一个更好的选择。
发布于 2016-04-03 05:37:55
必须将__init__()方法添加到domain_monitor中,否则所有实例都将共享相同的name和tasks。
到目前为止
s1.tasks is s2.tasks
>>>True在您添加:
def __init__(self, name, tasks):
self.name = name
self.tasks = tasks所有实例都将具有不同的属性。
https://stackoverflow.com/questions/36381927
复制相似问题