2016-04-03 16 views
0

s1とs2の2つのインスタンスを作成しようとしましたが、メモリが2回書き込まれました。 私が手:2の代わりに1つのインスタンスでメモリを上書きする

 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? 

私は、次のようにクラスを作成しました:

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

私は、次のような出力を印刷:

私は次のようにインスタンスを移入開始

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

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

答えて

1

classの定義tasksは静的なプロパティです。つまり、インスタンス間で共有されます。オブジェクトプロパティを初期化するには、__init__メソッドを定義する必要があります。たとえば:ところで

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

、クラス名はPEP8に応じCamelCaseでなければなりませんので、DomainMonitorは、より良い選択です。

2

メソッドをdomain_monitorに追加する必要があります。そうしないと、すべてのインスタンスが同じnametasksを共有します。

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

すべてのインスタンスは、別々の性質を持っています:

は、これまでのところ、あなたが追加した後

s1.tasks is s2.tasks 
>>>True 

を持っています。

関連する問題