I have a list of objects known as Civilizations
and initialized as
Civilizations = []
I also have a class Civilization and class Mothership as
class Civilization():
name = "Default Civilization"
hero_count = 1
builder_count = 20
mothership = []
def __init__(self, param, name, hero_count):
self.param = param
self.name = name
self.hero_count = hero_count
class Mothership():
name = ""
coord_x = 0.0
coord_y = 0.0
coord_size = 50
def __init__(self, name, coord_x, coord_y):
self.name = name
self.coord_x = coord_x
self.coord_y = coord_y
red = Civilization(10, "RED", 1)
blue = Civilization(12, "BLUE", 1)
Civilizations.append(red)
Civilizations.append(blue)
orange = Mothership("Stasis", 300.0, 500.0)
red.mothership.append(orange)
yellow = Mothership("Prime", 350.0, 550.0)
blue.mothership.append(yellow)
x = []
y = []
s = []
n = []
print(Civilizations)
for t in Civilizations:
a = t.mothership[0]
print(a)
# x.append(a.coord_x)
# y.append(a.coord_y)
# s.append(a.coord_size)
# n.append(a.name)
print(n)
print(x)
Printing (a) gives us <__main__.Mothership object at 0x0000029412E240A0>
twice as a result, and x ends up looking like [300,300]
. Is there a way to iterate over the objects and obtain their individual attributes? I am trying to get x to look like [300, 350]
.
Thank You for your help!
CodePudding user response:
Issue is with the below two lines of code.
for t in Civilizations:
a = t.mothership[0]
mothership list in Civilizations class will be appended with two objects. Civilizations.mothership = [ obj_orange, obj_yellow ]
Since your mothership list having two values in index of 0 & 1. In your code you are using only index 0 to retrieve the value throughout the loop. Your loops runs twice and returns the same object (obj_orange) twice.
Either you have to retrieve both the values from index 0 & 1 like below
for t in Civilizations:
a = t.mothership[0]
b = t.mothership[1]
Or simply you can use 'enumerate' which is very good practice in situations like where you don't know the number of elements in a list.
for i, t in enumerate(Civilizations):
print(t.mothership[i])
where i = index number , t = value