2016-10-27 6 views
1

私の仕事は実際にはとても簡単です。たぶん私は自分の過ちを見ないためにC + +にあまりにも慣れています。 私は2つのクラスとリストを持っています。 リストにはclass1で作成されたすべてのオブジェクトが含まれている必要がありますが、class1にはclass2のすべてのオブジェクトのリストも含まれています。 だから我々は持っている:"個別の"オブジェクトを作成する方法

# class1 objects: 
obj1= class1() 
obj2= class1() 

# class2 objects 
obj3 = class2() 
obj3.name, obj3.number = "hello world", 10 
obj4 = class2() 
obj4.name, obj3.number = "hello europe", 20 
obj5 = class2() 
obj5.name, obj3.number = "hello asia", 30 
obj6 = class2() 
obj6.name, obj3.number = "hello africa", 40 

# Attach object3 and object4 to object1 
obj1.All_Objects2.append(obj3) 
obj1.All_Objects2.append(obj4) 

# Attach object5 and object6 to object2 
obj2.All_Objects2.append(obj5) 
obj2.All_Objects2.append(obj6) 

# Attach obj1 and obj2 to the global list.  
All_Objects1.append(obj1) 
All_Objects1.append(obj2) 

そして最後に、私はそれが属するところすべてがあるかどうかをチェックするための印刷を行います:

All_Objects1 = []  # For class1 objects 

class class1 (object): 
    All_Objects2 = [] # For class2 objects 

class class2 (object): 
    name = "" 
    number = 0 

今、私はこれを行う

print (len(All_Objects1[0].All_Objects2)) # Should be 2. 
for i in All_Objects1[0].All_Objects2: 
    print (i.name)      # Should be world and europe. 

print (len(All_Objects1[1].All_Objects2))  # Should be 2. 
for i in All_Objects1[1].All_Objects2:  # Should be asia, africa. 
    print (i.name) 

を今問題があります、すべてのobject2はすべてのobject1にあり、私は理由を知りません。私はこのような何かを私の実際のプログラムで

、何が実際のC++で動作します:

#pseudo 
for i in all_information: 
    if (i==Keyword): 
     currentObject = class1() 
     All_objects.append(currentObject) 

そして私は私のリストには、いくつかの独立したオブジェクトを持つことになります。しかし、Pythonでは、私は何とか "currentObject"を上書きすることができないと思う。

ありがとうございました。

+0

クラスにinit関数を追加してみてください。私は多分、Pythonはそれのための新しいメモリブロックを作成することを知らないと思う:https://www.tutorialspoint.com/python/python_classes_objects。htm 空の/空白のinit(唯一のコマンドとしての書き込みパス)でもトリックを行う必要があります –

+1

なぜクラス外の最初のリストを使用していますか?なぜあなたはクラスを初期化していないのですか?あなたはなぜ継承を使っていないのですか? –

+1

'All_Objects2 = []'はすべてのオブジェクトに共有要素を作成します。 '__init__'関数を使って' self.All_Objects2 = [] 'を作成する – furas

答えて

1
それを拡張します:

クラス1とクラス2に、このようなメソッドを作成します。

Pythonでは、関数の外で宣言されたすべてのクラスメンバーは静的メンバーです。したがって、それらはクラスからインスタンス化された各オブジェクトによって共有されます。何をしたい

は以下の通りです:

class class1 (object): 
    def __init__(self): 
     self.All_Objects2 = [] # For class2 objects 

class class2 (object): 
    def __init__(self): 
     self.name = "" 
     self.number = 0 
2

このエラーを起こす可能性があるPythonでは、まずPythonのバージョンxを使用していますか?

まだ私のコンソールではテストしていませんが、初期化の問題だと思います。リストを宣言する方法については、Pythonのアプローチを使用することをお勧めします。インスタンス変数の場合はself、これが機能する場合は、なぜこのようなことが起こったのか説明してください。すぐに私は家に帰る、

def __init__(self, object_list=None) : # use corresponding classes attributes. 
    if self.name_of_your_variable: 
      self.name_of_your_variable= [] # or proper value 

は、あなたのクラスにこれを適応し、それが動作するかどうか、私は、知っている私は

1

あなたは自分のクラスを初期化する必要があります。 があり、すべてのオブジェクトリストが1つだけ必要です。クラスの例を以下に示します。

class firstA(): 
    def __init__(self): 
     self.All_Objects = [] 

class secondB(): 
    def __init__(self): 
     self.name ="None" 
     self.number = 0 

このクラスを呼び出すと、初期化が行われます:-)これはpython2/3で非常に便利です。

クラス外で初期化されたものは、静的変数とみなされます。したがって、あなたの例では、All_Objects1のリストがインスタンスです。

これはあなたの疑問を明確にすることを願っています!良い一日を。

+0

Trotzdem Danke :-) – Fabian

関連する問題