【问题标题】:Class variables resetting in python在python中重置类变量
【发布时间】:2017-01-09 02:13:52
【问题描述】:

现在我遇到一个问题,一个类的值被重置,我不确定在哪里。谁能帮忙?这是代码

while True:
   #some code#
   Hub().paint(gameDisplay)

Hub/paint 功能如下图所示

def paint(self, screen):
    if self.gimseen == 0 and self.pressed == 0:
        screen.blit(image1, (self.x, self.y))
        self.pressed = (pygame.mouse.get_pressed()[0])
        if self.pressed == 1:
            self.gimseen += 1

在一些代码中,我调用了一个函数,该函数也用于获取 self.pressed 的值,除了在 while 循环上方添加一行声明 hub = hub() 之外,还有其他方法可以做到这一点吗?

【问题讨论】:

  • 每次循环时都会创建一个 Hub() 的新实例。您需要在循环的outside中创建一个实例,然后调用方法paint()inside Hub()one 实例上的循环。
  • 你能告诉我怎么做吗?感谢您的所有帮助
  • 当然,我刚刚留下了答案。

标签: python class while-loop pygame reset


【解决方案1】:

您的变量正在重置的原因是因为您在每次 while 循环循环时都会创建一个全新的 Hub() 实例。这意味着每次调用paint() 时,之前Hub() 实例的任何状态都会丢失。相反,您需要在while 循环之外创建Hub() 类的一个实例,然后在Hub() 的一个实例上调用循环内的paint() 方法:

# only create one instance of hub.
hub = Hub()
# create you loop.
while True:
    # call the method paint on the
    # the one instance of Hub(); hub.
    hub.paint()

【讨论】:

  • 感谢您的所有帮助,但 hub.pressed 的值源自我在上面在某些代码中调用的函数,因此 hub.pressed 的值在我需要时从 1 开始从 0 开始,你能想到什么可以解决这个问题吗?如果您需要任何其他代码或信息,我可以给您。
  • @ChrisHowe 很抱歉,在这里我无法为您提供帮助。评论不是解决错误问题的好地方。欢迎您提出另一个问题。但请使用我们的tour 并在help center 中使用on-topic 阅读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2018-11-03
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多