Python Forum

Full Version: Attribute Error: object has no attribute
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi I'm trying to make a basic game. I'm attempting to have rows of stars as background. This is the code I'm using:

import sys 

import pygame  # contains functionality to make a game

from settings import Settings
from star import Star

class StarrySky:
    """Initialise a grid of stars on the screen."""
    def __init__(self):
        """Initialise the game and create game resources."""
        pygame.init() # initialise the background settings 
        # which the game needs to work properly
        self.settings = Settings()

        self.screen = pygame.display.set_mode((0,0), pygame.FULLSCREEN)
        # tells pygame to figure out a window size to fill the screen
        self.settings.screen_width = self.screen.get_rect().width
        self.settings.screen_height = self.screen.get_rect().height
        # updates the screen settings after fullscreen has been created
        pygame.display.set_caption("Starry Sky")

        self.star = Star(self)

        def check_events(self):
        # Watch for keyboard and mouse events.
            for event in pygame.event.get():
                if event.type == pygame.K_q:
                    sys.exit()

        def create_grid(self):
            """Create the grid of stars."""
            # create a star and find the number of stars in a row.
            # spacing between stars equal to 1 star width.
            star = Star(self)
            star_width, star_height = star.rect.size
            available_space_x = self.settings.screen_width - (2 * alien_width)
            number_stars_x = available_space_x // (2 * star_width)

            # Determine the number of rows of aliens that fit on the screen.
            available_space_y = (self.settings.screen_height - 
            (3 * alien_height) )
            number_rows = available_space_y // (2 * star_height)

            # Create the full sky of stars. 
            for row_number in range(number_rows):
            # Create the first row of stars.
                for star_number in range(number_stars_x):
                    # Create a star and place it in the row.
                    self._create_star(star_number,row_number) 
        
        def create_star(self, row_number, star_number):
            star = Star(self)
            star.x = star_width + 2 * star_width * star_number
            star.rect.x = star.x
            star.rect.y = star.rect.height + 2 * star.rect.height * row_number
            self.stars.add(star)

        def update_screen(self):
            """Update images on the screenand flip to the new screen."""
            # redraw the screen during each pass through the loop 
            self.screen.fill(self.settings.bg_color)
            self.ship.blitme()
            self.stars.draw(self.screen)
            pygame.display.flip()

if __name__ == "__main__":
    # make a game instance and run the game
    ai = StarrySky()
    ai.run_game()
            


However I'm getting this error:

Error:
File "c:\Users\djwil\Documents\python\python crash course\Projects\Alien invasion\star_sky.py", line 70, in <module> ai.run_game() AttributeError: 'StarrySky' object has no attribute 'run_game'
I'm not sure why this is occurring as I've used this line before in previous programs with no issue.
Please post complete, unaltered error traceback.
It contains valuable information about your scripts process.

what's shown is enough to see that there is no method named run_game.
You can't run it if it's not there.
This is the whole error report:

Error:
pygame 2.0.0 (SDL 2.0.12, python 3.9.0) Hello from the pygame community. https://www.pygame.org/contribute.html Traceback (most recent call last): File "c:\Users\djwil\Documents\python\python crash course\Projects\Alien invasion\star_sky.py", line 70, in <module> ai.run_game() AttributeError: 'StarrySky' object has no attribute 'run_game'
This is a repost of the bottom from post #2

what's shown is enough to see that there is no method named run_game.
You can't run it if it's not there.

---- new ----
To elaborate:
You instantiate ai as StarrySky but StarrySky does not have a method named run_game
so ai.run_game is invalid