Why am I getting a TypeError: 'int' object not callable in a micro:bit MicroPython program?

Why am I getting a TypeError: 'int' object not callable in a micro:bit MicroPython program?

我正试图为 micro:bit 制作某种 Boxel Rebound 游戏,我在 online web editor 编写代码。一切正常,直到我尝试实现跳跃。当我启动程序时,它工作正常,我在 REPL 中得到了我的调试信息:

Updating...
  Isn't jumping
Updating...
  Isn't jumping
Updating...
  Isn't jumping
...

但是当我按下按钮 A 时,我得到

Traceback (most recent call last):
  File "main.py", line 57, in <module>
TypeError: 'int' object isn't callable

这是我的代码:

from microbit import *

def scroll(*args, **kwargs):
    for arg in args:
        print(arg, **kwargs)
        display.scroll(arg)

#scroll('Boxel rebound')

WIDTH  = 4
HEIGHT = 4

class Player:
    b = 9
    
    def __init__(self):
        self.x = 1
        self.y = HEIGHT
        
        self.is_jumping = False
        self.jump       = 0
    
    def update(self):
        print('Updating...')
        if self.is_jumping:
            print('  Is jumping')
            self.jump += 1
            self.x    += 1
        else:
            print('  Isn\'t jumping')
            if self.y > HEIGHT:
                self.y += 1
        if self.jump >= 2:
            self.is_jumping = False
        
    def show(self):
        display.set_pixel(
            self.x,
            self.y,
            self.__class__.b
        )
    
    def jump(self):
        if not self.is_jumping:
            self.is_jumping = True

player = Player()

while True:
    display.clear()
    player.update()
    player.show()
    
    if button_b.get_presses() > 0:
        break
    elif button_a.get_presses() > 0:#button_a.is_pressed():
        player.jump() # This raises the error
    
    sleep(200)
    
display.clear()

您的 Player 对象有一个名为 jump 的属性和方法(在您的 __init__ 中有 self.jump = 0)。这就是您的 player.jump() 正在使用的(虽然您希望它使用该方法)并且您显然不能将 int 作为方法调用。

更改两者之一的名称(属性或方法),它应该可以工作。

在classPlayer中你定义了成员变量和名为jump的函数。调用跳转方法时,您试图调用一个不可调用类型的整数。小心地重命名这两个成员之一。