2016-04-03 25 views
0

S1 ve s2 için 2 örnek oluşturmaya çalıştım, ancak bellek iki kez yazılıyor. alıyorum:2 yerine bellek üzerine yazma 2

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

ben aşağıdaki gibi çıktı yazdırmak:

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

ben aşağıdaki gibi örneklerini doldurma başladı:

 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? 

aşağıdaki gibi bir sınıf yarattı

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

cevap

1

Sizin class tanımında, statik bir özelliktir, yani bu örnekler arasında paylaşılacaktır. Nesne özelliklerini başlatmak için __init__ yöntemini tanımlamanız gerekir. Örneğin: Bu arada

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

, sınıf isimleri PEP8 göre CamelCase olmalıdır, yani DomainMonitor daha iyi bir seçim olacaktır.

2

__init__() yöntemini domain_monitor'a eklemeniz gerekir, aksi takdirde tüm örnekler aynı name ve tasks'u paylaşır.

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

tüm örnekleri ayrı özelliklere sahip olacaktır:

Şimdiye kadar size ekledikten sonra

s1.tasks is s2.tasks 
>>>True 

var.