2017-01-12 11 views
0

私は今Pythonでクラスを扱おうとしています。私はクラスからオブジェクトを作成しました:この時点でリストを追加するPythonメソッドが機能していませんか?

class Class1(): 
    def __init__(self, bar): 
     self.b = bar 
    def assignbar(self, somelist): 
     self.b.extend(somelist) 
foo1=foo2=foo3=Class1([]) 

は、印刷foo1.bは、foo2.b、およびfoo3.bは、実際には、空のリストを与えるん。 今、私は15の要素の長さの別のリストを持っています。私は私の問題を抱えているところ、次のとおりです。

numbers=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] 
foo1.assignbar(numbers[0:5]) 
foo2.assignbar(numbers[5:10]) 
foo3.assignbar(numbers[10:15]) 
print foo1.b 
print foo2.b 
print foo3.b 

の代わりに[0,1,2,3,4]、[5,6,7,8,9]私を与え、そして[10,11、 12,13,14]、これは単純に私に数字の全体を3回与えます。私は別に、このようfoo1が、foo2は、およびfoo3を定義する場合しかし、私はそれが必要だと思うよう

foo1=Class1([]) 
foo2=Class1([]) 
foo3=Class1([]) 

プログラムが実行されます。私は知りたいのですが、3つのオブジェクトすべてを同じものとして設定しても機能しないのはなぜですか?それはあなたのいずれかでassignbarを呼び出すと、他のすべての3つのassignbarを呼び出しているからですか?あなたの最初の例で

答えて

0

foo1=foo2=foo3=Class1([]) 

あなただけClass1の単一のインスタンスを作成し、それを3人の異なる名前を割り当てています。 foo1foo2、またはfoo3でメソッドを実行するかどうかは、同じインスタンスで動作しています。次から同じ結果を得ることに注意してください:

foo3 = Class1([]) 
foo2 = foo3 
foo1 = foo3 

あなたの第二の例は、適切にクラスを3回インスタンス化し、あなたが期待するようように動作します。これはユーザ定義クラスへのが、任意の変更可能なオブジェクトに固有ではありません

注:あなたが同じインスタンスで作業しているので、

>>> foo1 = foo2 = foo3 = [] 
>>> foo1.append(1) 
>>> foo1 
[1] 
>>> foo2 
[1] 
>>> foo3 
[1] 
0

私の事問題があります。オブジェクトfoo1がリスト[0,1,2,3,4]を取得し、他のすべてのオブジェクトが同じ値を取得するまでの時間。オブジェクトfoo2 [5,6,7,8,9]とすべてのオブジェクトの後に同じ値が得られます。私はそれが問題でなければならないことです。

0
foo1=foo2=foo3=Class1([])

foo1foo2foo3は、あなたがそれらのいずれかに行うどんな意味し、同じオブジェクト(インスタンス)を強要するために参照している、まったく同じオブジェクトは、それだけで3つの名前(foo1foo2があり、変更されます、 foo3)を使用してください。

foo1=Class1([]) 
foo2=Class1([]) 
foo3=Class1([]) 

上記のコードでは、foo1foo2foo3Class1の三つの異なるインスタンスであるが、それらは同じオブジェクトを指しているわけではありません。

いつも同じかどうかはid(foo1),id(foo2)またはid(foo3)です。

関連する問題