Переменная Не Будет Обновляться В Классе

#python #pygame

Вопрос:

 import sys import pygame from pygame.locals import * pygame.init() class Game:  def __init__(self):  self.width = 800  self.height = 900  self.win = pygame.display.set_mode([self.width, self.height])  self.caption = pygame.display.set_caption('Clicker Game','Game')  self.money = 0   self.moneyperclick = 0   def moneytracker(self):  self.money = self.money   self.moneyperclick  print(self.money)   def mousestuff(self):  self.mousepos = pygame.mouse.get_pos()  self.clicked = pygame.mouse.get_pressed()   def mainloop(self):  self.mousestuff()  for event in pygame.event.get():  if event.type == MOUSEBUTTONDOWN:  self.moneytracker()  if event.type == QUIT:  pygame.quit()  sys.exit()  pygame.display.update()  while True:  Game().mainloop()  

Я все еще немного новичок в кодировании, но я очень смущен тем, почему self.money переменная не обновляется, хотя я призываю ее обновить. Я провел несколько тестов и знаю, что он зацикливает код там, где я его установил self.money = 0 , но я не знаю, как это обойти. Спасибо

Ответ №1:

Похоже, проблема здесь:

 while True:  Game().mainloop()  

Это создает новый Game объект на каждой итерации цикла, что означает, что все значения инициализируются в первый раз, потому что это новый объект.

Альтернативы заключаются в том , чтобы переместить while True петлю внутрь mainloop() или попробовать что-то вроде:

 game = Game() while True:  game.mainloop()  

Это создает один Game объект as game , mainloop() метод которого вызывается повторно. Поскольку объект создается только один раз, атрибуты объекта (например money , доступ как self.money ), измененные в результате действий игрока, будут сохранять свои значения между итерациями цикла.

В исходной структуре цикла Game каждый раз создавался новый объект, что означает, что действия игрока выполнялись только один раз, прежде чем объект был оставлен и заменен новым, с новыми инициализированными атрибутами.

Комментарии:

1. Можете ли вы объяснить, почему игра = Game() при истинности: game.mainloop() на самом деле работает?

2. @Happyface456: Я добавил еще несколько деталей