2016-04-03 12 views
0

Ich habe versucht, 2 Instanzen für s1 und s2 zu erstellen, aber der Speicher wird zweimal geschrieben. ich:Speicher in 1 Instanz überschreiben statt 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? 

ich eine Klasse wie folgt erstellt:

 class domain_monitor: 
     name = ''; 
     tasks = []; 

Ich begann im Anschluss an die Instanzen als bevölkern:

 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"); 

ich die Ausgabe wie folgt drucken:

 for v in s1.tasks: # 
     print v 
    print " ========================================= " 
    for v in s2.tasks: # 
     print v 

Antwort

1

In Ihrer class Definition tasks ist eine statische Eigenschaft, was bedeutet, dass es über Instanzen hinweg geteilt wird. Sie sollten eine __init__ Methode verwenden, um Objekteigenschaften zu initialisieren. Zum Beispiel:

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

By the way, Klassennamen in CamelCase nach PEP8 sein muss, so DomainMonitor wäre eine bessere Wahl sein.

2

Sie müssen die __init__() Methode zu domain_monitor hinzufügen, sonst werden alle Instanzen die gleichen name und tasks teilen.

Bisher haben Sie

s1.tasks is s2.tasks 
>>>True 

Nachdem Sie hinzufügen:

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

Alle Instanzen werden getrennte Eigenschaften haben.