在 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
,否则所有实例将共享相同的 name
和 tasks
。
到目前为止你有
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
是更好的选择。
我尝试为 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
,否则所有实例将共享相同的 name
和 tasks
。
到目前为止你有
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
是更好的选择。