我最近决定开始学习python。我大部分时间都使用过C ++,有些事情让我感到很困惑。
以下是我遇到问题的代码(此处为完整代码:http://pastebin.com/tj3qJnvM)
class Display:
def __init__(self, background):
resolution = (800, 600)
screen = pygame.display.set_mode(resolution)
background = pygame.Surface(screen.get_size())
background.fill((255, 255, 255))
background = background.convert()
def init(map, background):
pygame.init()
display = Display(background)
map.draw(background)
def main():
background = None
init(map, background)
当我在display = Display(background)
(第61行)中调用init
时,它应该初始化背景,以便可以在下一行使用它。相反,我得到的错误是背景为无。
如果我理解正确的话,那是因为background设置为None而None是不可变的,所以它在Display构造函数中创建局部变量背景。
我该如何应对这种情况?
我知道最好将后台作为Display类的成员,但我想了解如何创建类似于在C中声明指针/引用的东西。然后在某个函数中初始化它。 将它传递给某些函数会很有用。
是否有可能在python中或每次都需要解决方法?
答案 0 :(得分:0)
固定。我认为你在类实例变量中寻找保存状态。如果您想在课堂上保存内容,请使用self.
。与大多数语言一样,变量除非明确定义为全局,否则不会影响其范围之外的任何内容。我添加了self.
并删除了后台变量函数参数。
class Display:
def __init__(self):
resolution = (800, 600)
screen = pygame.display.set_mode(resolution)
background = pygame.Surface(screen.get_size())
background.fill((255, 255, 255))
self.background = background.convert()
def init(map):
pygame.init()
display = Display()
map.draw(display.background)
def main():
init(map)
此外,您尚未定义map
,因此您可能会遇到map.draw
的问题。它只运行,因为map
恰好是内置的Python函数。
编辑:没关系,忘了我刚刚说的话。
我看到你的完整代码示例定义了它。