Моя задача на самом деле довольно проста. Может быть, я слишком привык к C++, чтобы не видеть свою ошибку. У меня есть два класса и список. В список должны быть включены все объекты класса 1, а класс1 также содержит список для всех объектов класса 2. Итак, мы имеем:Как создать «отдельные» объекты
All_Objects1 = [] # For class1 objects
class class1 (object):
All_Objects2 = [] # For class2 objects
class class2 (object):
name = ""
number = 0
Теперь я делаю это:
# 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)
И, наконец, я сделать печать для проверки, если все, где она принадлежит:
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)
Теперь проблема , что каждый объект2 находится в каждом объекте1, и я не знаю, почему.
В моей реальной программе я делаю что-то вроде этого, что бы на самом деле работает в C++:
#pseudo
for i in all_information:
if (i==Keyword):
currentObject = class1()
All_objects.append(currentObject)
И тогда я буду иметь некоторые независимые объекты в моем списке. Но в Python я думаю, что я как-то не могу перезаписать «currentObject».
Большое вам спасибо за помощь.
попробуйте добавить функцию init к классу; Я думаю, возможно, python не знает, для создания новых блоков памяти для него: https://www.tutorialspoint.com/python/python_classes_objects.htm Даже пустой/пустой init (просто запись в качестве единственной команды) должен сделать трюк –
Почему вы используете первый список за пределами класса? Почему вы не инициализируете класс? И почему вы не используете наследование? –
'All_Objects2 = []' создает общий элемент во всех объектах. Используйте '__init__' функцию для создания' self.All_Objects2 = [] ' – furas