2017-12-24 37 views
1

私はPython Crash Courseからプロジェクトを実行しようとしていますが、プロジェクトの途中でこのエラーが発生しています。 alien_invasion.py、settings.pyとship.pyファイルを持って、ここで彼らは、次のとおりです。Python Crash Courseプロジェクト:オブジェクトには属性がありません

これはalien_invasion.pyは

import sys 
import pygame 
from settings import Settings 
from ship import Ship 

def run_game(): 
    pygame.init() 
    ai_settings = Settings() 
    screen = pygame.display.set_mode((ai_settings.screen_width, 
    ai_settings.screen_height)) 
    pygame.display.set_caption("Alien Invasion") 

    ship = Ship(screen) 

    bg_color = (230, 230, 230) 

    while True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       sys.exit() 

     screen.fill(ai_settings.bg_color) 
     ship.blitme() 

     pygame.display.flip() 

run_game() 

これはsettings.pyであるメインのファイルがある

class Settings(): 

    def __init__(self): 

      self.screen_width = 1200 
      self.screen_height = 600 
      self.bg_color = (230, 230, 230) 

これはship.pyです

import pygame 

class Ship(): 
    def __init__(self, screen): 
     self.screen = screen 

     self.image = pygame.image.load('images/ship.bmp') 
     self.rect = self.image.get_rect() 
     self.screen_rect = screen.get_rect() 

     self.rect.centerx = self.screen_rect.centerx 
     self.rect.bottom = self.screen_rect.bottom 

     def blitme(self): 
      self.screen.blit(self.image, self.rect) 

、それは言う:

Traceback (most recent call last): 
    File "alien_invasion.py", line 26, in <module> 
    run_game() 
    File "alien_invasion.py", line 22, in run_game 
    ship.blitme() 
AttributeError: 'Ship' object has no attribute 'blitme' 
+0

インデントは、ship.pyのinitのblitme部分を作成します。 –

+0

あなたのコードの字下げが原因です。あなたの関数 'blitme'は' __init__'の中にあります – Gahan

答えて

2

問題は、あなたがship.py.内のinitにネストされblitme機能を持っていますタブは、と一直線に並んで機能し、blitme()を参照することができます。

import pygame 

class Ship(): 
    def __init__(self, screen): 
     self.screen = screen 

     self.image = pygame.image.load('images/ship.bmp') 
     self.rect = self.image.get_rect() 
     self.screen_rect = screen.get_rect() 

     self.rect.centerx = self.screen_rect.centerx 
     self.rect.bottom = self.screen_rect.bottom 

    def blitme(self): 
     self.screen.blit(self.image, self.rect) 
関連する問題