2016-02-11 3 views
0

Когда я запускаю свою программу, я хочу, чтобы она запускалась start_game(self). Для этого нужно запустить конструктор. Без этого объекты не существуют, и поэтому их методы не могут быть запущены. Пока что так ясно. В принципе, я пытаюсь правильно «начать» этот процесс.Невозможно указать переменную self, если __name__ == '__main__': block

from Surface import Surface 
from Pellet import Pellet 
from Pacman import Pacman 
from Ghost import Ghost 
from Timer import Timer 


class Controls: 
    def __init__(self): 
     global the_surface 
     the_surface = Surface(self) 

     the_pellets = [] 

     for y in range(0, 8): 
      for x in range(0, 14): 
       pellet = Pellet(x, y) 
       the_pellets.append(pellet) 

     global the_pacman 
     the_pacman = Pacman(the_pellets) 

     the_ghosts = [] 
     for ghost in range(0, 3): 
      the_ghosts.append(Ghost()) 

     global the_timer 
     the_timer = Timer(self, 200) 

    # [...] 

    def start_game(self): 
     self.__init_game_objects() 
     Timer.start(the_timer) 
     return 

    def tick_timer(self): 
     Pacman.move(the_pacman) 
     return 

    # http://stackoverflow.com/a/419185 
    if __name__ == '__main__': 
     # need to run start_game() 

То, что я пытался (все следующее после if __name__ [...] линии, каждая точка пуля представляет одну пробу.)

первая попытка:

the_controls = Controls() 
the_controls.start_game(the_controls) 

Traceback (most recent call last): 
    File "Controls.py", line 8, in <module> 
    class Controls: 
    File "Controls.py", line 53, in Controls 
    the_controls = Controls() 
NameError: name 'Controls' is not defined 

вторую попытку :

__init__('Controls') 
self.start_game(self) 

Traceback (most recent call last): 
    File "Controls.py", line 8, in <module> 
    class Controls: 
    File "Controls.py", line 54, in Controls 
    self.start_game(self) 
NameError: name 'self' is not defined 

третья попытка (как это было предложено @ TigerhawkT3)

the_controls = Controls() 
the_controls.start_game() 

Traceback (most recent call last): 
    File "Controls.py", line 8, in <module> 
    class Controls: 
    File "Controls.py", line 53, in Controls 
    the_controls = Controls() 
NameError: name 'Controls' is not defined 
+1

Является ли ваш отступ неправильным или является '' if __name__'' ... определенным в вашем классе? – MSeifert

+0

@MSeifert согласно http://stackoverflow.com/a/419185/5124117 Мне не нужно определять '__name__', поскольку это автоматически настраивается при запуске программы. Я проверю свой отступ – toogley

+2

Извините, я имел в виду '' if __name__ == '__main __': '' имеет тот же отступ, что и внутри класса в вашем первом блоке кода. (последние несколько строк) – MSeifert

ответ

3

Похоже, что в вашем коде есть ошибка с отступом: if __name__ == '__main__': определен в вашем классе. Вы должны определить его вне класса в пространстве имен global этого файла/модуля (что означает: без отступа), если вы хотите, чтобы он выполнялся при импорте файла/модуля.

3

сам экземпляр автоматически передается. Используйте следующее:

the_controls = Controls() 
the_controls.start_game() 

Это подобно другим методам объекта вы можете быть знакомы с:

'hello world'.upper() 

Вы можете написать это так:

the_controls = Controls() 
Controls.start_game(the_controls) 

Или это:

str.upper('hello world') 

Но бывший стиль предпочтительнее второго.

+0

Я обратил внимание на то, что в моем методе сообщения в моем сообщении (третья попытка), но он не сработал. – toogley

+2

@ toogley, потому что ваш отступ неправильный. –

+0

Ваш опубликованный код не может быть всем вашим кодом, потому что, если он был точным и полным, ничего не произойдет, когда вы запустите программу. – TigerhawkT3

Смежные вопросы