Почему не удается присвоить значение переменной в экземпляр класса?

  • 16 августа 2023 г. 15:26
Ответы на вопрос 5
Ошибка возникает, потому что в текущей версии кода переменная `screen` не определена. Вместо этого используется неизвестная переменная `self.screen`. 

Чтобы исправить ошибку и правильно передать экземпляр `screen` в класс `Ship`, необходимо заменить строку `self.ship = Ship(screen)` на `self.ship = Ship(self.screen)`.

Исправленный код:

```python
import sys
import pygame
from set import Settings
from ship import Ship

class Aliens:
    def __init__(self):
        pygame.init()

        self.settings = Settings()
        self.screen = pygame.display.set_mode((self.settings.w, self.settings.h))

        pygame.display.set_caption('asdsad')
        self.ship = Ship(self.screen)

    def run(self):
        while True:
            for event in pygame.event.get():
                print(event)
                if event.type == pygame.QUIT:
                    sys.exit()
            self.screen.fill(self.settings.bg_color)
            self.ship.blitme()
            pygame.display.flip()

if __name__ == '__main__':
    ai = Aliens()
    ai.run()
```

Теперь экземпляр `self.screen` правильно передается в класс `Ship`, и значение переменной успешно присваивается.
self.ship = Ship(self.screen)
Требуется передать атрибут класса screen в конструктор Ship(), которому присваивается переменная self.screen. Обрати внимание, что в Python необходимо явно указывать self при обращении к полям класса.
А почему он должен? Где ты объявил screen? У тебя есть поле self.screen, передавай его. 
self.ship = Ship(self.screen)Ты пытаешься передать в конструктор Ship() локальную переменную screen, которой у тебя нет. Тут используется not C#, если обращаешься к полям класса - явно указывай self.
Похожие вопросы