почему я не могу вызвать свой метод изнутри класса в Python? - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь создать класс кнопок для своей игры, используя 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 Ответ

3 голосов
/ 19 апреля 2019

В def update(self, screen), Оператор if должен быть if self.isHovering().

Если нет, интерпретатор будет искать функцию isHovering где-то в текущем модуле, как если бы вы определили ее за пределами вашего класса. Использование префикса self. будет означать, что вы действительно пытаетесь вызвать метод экземпляра, как JacoblRR уже указывал в комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...