如何在属性存在之前引用它

2024-06-26 07:34:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用pygame编写一个游戏,我有一个类,当你点击它时,它会显示每个建筑的统计数据。类变量current\u hud开始时为None,但单击建筑时,其值将成为建筑对象,因此调用draw函数时,它仅绘制选定建筑的hud。你知道吗

问题是,我试图在hud中创建一个“Text”类的实例,但是我得到了AttributeError:'NoneType'对象没有属性'name',因为自身电流\u hud还不是物体,所以自身电流\u hud.name还不是属性。如何引用尚不存在的属性?在单击建筑之前等待实例化hud类真的是唯一的选择吗?你知道吗

 class Hud:
    current_hud = None
    def __init__(self,x,y):
        self.x = x
        self.y = y
        self.name_text = Text(x,y,str(self.current_hud.name), (0,0,0), 36)

    def draw(self):
        if Hud.current_hud == self:
            self.square = pygame.Rect((self.x,self.y),(440,400))
            pygame.draw.rect(screen,(255,255,255),self.square)
            self.name_text.x = self.x + 10
            self.name_text.y = self.y + 20

抱歉,如果这是复杂的,但有点难以解释。如果您想运行它并了解它的工作原理,完整的代码就在这里:https://github.com/hailfire006/economy_game/blob/master/economy_game.py


Tags: 对象实例textnameselfnone属性current
1条回答
网友
1楼 · 发布于 2024-06-26 07:34:18

可以将名称作为Hud类的一个选项,并在实例化Text类之前进行设置。你知道吗

 class Hud:
    current_hud = None
    def __init__(self,x,y,name):
        self.x = x
        self.y = y
        self.current_hud.name = name
        self.name_text = Text(x,y,str(self.current_hud.name), (0,0,0), 36)

    def draw(self):
        if Hud.current_hud == self:
            self.square = pygame.Rect((self.x,self.y),(440,400))
            pygame.draw.rect(screen,(255,255,255),self.square)
            self.name_text.x = self.x + 10
           self.name_text.y = self.y + 20

在您的完整代码示例中,当您实例化一个建筑时,您会得到它的名称,然后可以在实例化时将其传递给Hud。你知道吗

class Building:
    def __init__(self,posX,posY,color,name):
        self.hud = Hud(0,0,name)

相关问题 更多 >