为什么我不能从python类中调用我的方法?

时间:2019-04-19 15:56:21

标签: python pygame

我正在尝试使用pygame为我的游戏制作按钮类。但是在按钮类中,我无法调用该类本身包含的方法。

我是班上新手,所以我可能缺少一些重要的东西,对不起

我试图将self添加到isHovering()方法中,但仍然无法正常工作。

import pygame

class Button():
    def __init__(self, pos, value, img, screen):
        self.pos = pos
        self.value = value
        self.img = img
        self.screen = screen

    ### Getters and Setters ###===============
    ### Get/Set Value : True/False ###
    def setValue(self, value):
        self.value = value
    def getValue(self):
        return self.value

    ### Get/Set Pos ###
    def setPos(self, pos):
        self.pos = pos
    def getPos(self):
        return self.pos

    ### Get/Set Img ###
    def setImg(self, img):
        self.img = img
    def getImg(self):
        return self.img

    #==========================================

    def isHovering(self):
        pos = getPos()
        imgRect = pygame.rect(pos[0], pos[1], 105, 105)
        if imgRect.collidepoint(pygame.mouse.get_pos()):
            return True
        else:
            return False

    def update(self, screen):
        if isHovering():
            image = pygame.transform.scale(self.img(95, 95))
        else:
            image = pygame.transform.scale(self.img(105, 105))
        screen.blit(image, self.pos)

我以为在主循环中调用update(screen)时,它将调用isHovering()并返回True或False,但我却收到此错误:

NameError:名称'isHovering'未定义

1 个答案:

答案 0 :(得分:3)

def update(self, screen)中, if语句应为if self.isHovering()

如果没有,解释器将在当前模块中的某个位置寻找isHovering函数,就像您在类之外定义它一样。 使用self.前缀将表明您确实在尝试调用实例的方法,正如JacoblRR在注释中已经指出的那样。