title: How do I draw a list of class objects in pygame?
body: <p>I am trying to create Space Invaders in pygame (I am a beginner and this is only my second game) and I have created a list of alien objects:</p>
  
  <pre><code>numOfAliens = 24
  aliens = []
  
  # An alien class containing an x, y, width, and height value
  class alien:
      x, y = 0, 0
      width, height = 20, 20
  
  # Loops 24 times and adds alien to the class
  for i in range(numOfAliens):
      aliens.append(alien)
  </code></pre>
  
  <p>I have another bit of code that adds 5 and the width to each x value to space the aliens apart:</p>
  
  <pre><code>for i in aliens:
      i.x += 5 + i.width
      print(i.x, i.y, i.width, i.height)
  </code></pre>
  
  <p>The print tells me that these first 2 blocks of code work fine without any issues, the problem occurs when I try to draw it to the pygame window:</p>
  
  <pre><code># Loops 24 times, drawing each alien to the window
  for i in range(numOfAliens):
          pygame.draw.rect(win, GREEN, (aliens[i].x, aliens[i].y, aliens[i].width, aliens[i].height))
  </code></pre>
  
  <p>Surely aliens[i].x will get the x value of each object in the list, but it doesn't.
  If I add a print("hi") in this for loop it infinitely prints out "hi" when it should only loop 24 times, and nothing gets drawn on the window, is there any way to fix this?</p>
  
  <p>Here is all the code if needed:</p>
  
  <pre><code>import pygame
  pygame.init()
  
  clock = pygame.time.Clock()
  
  # Window
  win_width, win_height = 500, 500
  
  win = pygame.display.set_mode((win_width, win_height))
  pygame.display.set_caption("Space Invaders")
  
  
  # Colours
  BLACK = (0, 0, 0)
  WHITE = (255, 255, 255)
  GREEN = (30, 224, 27)
  
  
  # Player
  player_width, player_height = 20, 20
  player_x, player_y = int((win_width / 2) - (player_width / 2)), (win_height - 50)
  player_vel = 10
  isShooting = False
  isAlive = True
  
  
  # Bullet
  bullet_width, bullet_height = 4, 16
  bullet_x, bullet_y = player_x, player_y
  bullet_vel = 5
  
  
  # Aliens
  numOfAliens = 24
  aliens = []
  
  class alien:
      x, y = 0, 0
      width, height = player_width, player_height
  
  for i in range(numOfAliens):
      aliens.append(alien)
  
  for i in aliens:
      i.x += 5 + i.width
      print(i.x, i.y, i.width, i.height)
  
  # Draw Function
  def draw():
      win.fill(BLACK)
      pygame.draw.rect(win, GREEN, (player_x, player_y, player_width, player_height))
  
      for i in aliens:
          pygame.draw.rect(win, GREEN, (i.x, i.y, i.width, i.height))
  
      if isShooting:
          pygame.draw.rect(win, WHITE, (bullet_x, bullet_y, bullet_width, bullet_height))
  
      pygame.display.update()
  
  # Game Loop
  run = True
  while run:
      clock.tick(20)
  
      for event in pygame.event.get():
          if event.type == pygame.QUIT:
              run = False
  
      keys = pygame.key.get_pressed()
  
      if keys[pygame.K_LEFT] and player_x &gt; 0:
          player_x -= player_vel
  
      if keys[pygame.K_RIGHT] and player_x &lt; win_width - player_width:
          player_x += player_vel
  
      if keys[pygame.K_SPACE] and not(isShooting):
          bullet_y = player_y
          bullet_x = int(player_x + (player_width / 2))
          isShooting = True
  
      if bullet_y + bullet_height &lt;= 0:
          isShooting = False
  
      if isShooting:
          bullet_y -= bullet_vel
  
      draw()
  
  pygame.quit()
  </code></pre>