我试图为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
答案 0 :(得分:2)
您必须将__init__()
方法添加到domain_monitor
,否则您的所有实例都会共享相同的name
和tasks
。
到目前为止,你有
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
是更好的选择。