phaggi
@phaggi
лужу, паяю, ЭВМы починяю

Как применить совет гуру по структуре программы, если делать class?

Вычитал совет товарища

Alex Martelli
(широко известного в узких кругах гуру Python) о том, что код вместо if/elif/else лучше организовывать так:
import pygame.locals as pygl
dispatch = {pygl.QUIT: exit_game, # whatever else
           }
f = dispatch.get(event.type)
if f is None:  # the "else" case"
   ...
else: f()

Идея мне понравилась, но когда дошел до практики, а именно попытался сделать класс MyGame, в котором сделать всё предложенное, столкнулся со следующими проблемами:
1. если я помещаю dispatch куда-то внутри класса, например в __init__ как атрибут, или в како-нибудь другой метод, то при инициализации экземпляра класса он срабатывает.
class MyGame:
    def __init__(self):
        self.dispatch = {pygl.QUIT: self.exit_game,  # whatever else
                         ...}

Т.е. сразу же происходит exit_game.

2. если я помещаю его просто в переменную в классе, типа:
class MyGame:
    dispatch = {pygl.QUIT: self.exit_game,  # whatever else
                ...}

    def __init(self):
        ...

или вообще где-то вне класса, то self же еще не инициализирован :/ интерпретатор справедливо ругается.

Подскажите, как замечательный совет товарища Алекса Мартелли правильно использовать?
  • Вопрос задан
  • 413 просмотров
Решения вопроса 1
phaggi
@phaggi Автор вопроса, куратор тега Python
лужу, паяю, ЭВМы починяю
Вопрос решен с помощью o5a - в словаре надо указывать не вызовы функций, а сами функции.
Т.е. не
self.dispatch = {pygl.QUIT: self.exit_game(),  # whatever else
                         ...}

а правильно:
self.dispatch = {pygl.QUIT: self.exit_game,  # whatever else
                         ...}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы