简体   繁体   中英

why can't I call my method from within class in python?

I am trying to make a button class for my game, using pygame. But in the button class, I cannot call methods that are contained in the class itself.

I am new to classes so I may be missing something important, I'm sorry

I tried to add self to the isHovering() Method but it still doesn't work.

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)

I thought that when update(screen) was called in my main loop, that it would call isHovering(), and return a True or False, but instead I get this error:

NameError: name 'isHovering' is not defined

In def update(self, screen) , The if statement should be if self.isHovering() .

If not, the interpreter will look for a isHovering function somewhere in the current module, like if you had defined it outside your class. Using the self. prefix will indicate that you are indeed trying to call a method of the instance as JacoblRR already pointed out in a comment.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM