在python中改变初始化对象的正确方法

时间:2016-12-28 18:48:42

标签: python pygame

我最近决定开始学习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中或每次都需要解决方法?

1 个答案:

答案 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函数。

编辑:没关系,忘了我刚刚说的话。

我看到你的完整代码示例定义了它。