python-3.x - TypeError:draw()缺少1个必需的位置参数:'win'
问题描述
class rocket(object):
def __init__(self, x, y):
self.image = pygame.image.load('sprites/spaceship.png')
self.x = x
self.y = y
self.width = 72
self.height = 72
self.speed = 5
self.angle = 0
def draw(self, win):
win.blit(char, (self.x,self.y))
def updateGameWindow():
win.blit(bg, (0,0))
rocket.draw(win)
pygame.display.update()
rocket.draw(win)
出于某种原因,当我运行这个程序时,当它明显存在时,我得到了缺少参数“win”的错误。
win
在程序的顶部定义。
解决方案
draw()
需要在rocket
实例上调用,而不是类本身:
rocket_instance = rocket(some_x, some_y)
rocket_instance.draw(win)
在上面代码的第一行中,您正在创建火箭类的实例,在第二行中,您正在调用该draw()
实例上的方法,其中实例本身作为self
参数被隐式传递。
在您的示例代码中,您从这一行得到一个错误,rocket.draw(win)
因为由于您调用draw()
的是类本身而不是实例,所以实例没有作为self
参数传递,而是将win
参数传递给self
参数,一切都失败了up 因为现在没有win
通过预期的参数。
推荐阅读
- android - 是否可以在应用安装日期之前查询网络使用数据
- git - 是否可以在没有 API 或其他服务器的情况下使用 git lfs?
- javascript - 使用 JavaScript 触发 Google Visualization StringFilter
- c# - 在 uwp Xaml 中使用 C# 解析 XML
- linux - Ubuntu 16.04.6 构建驱动程序给出缺少头文件错误
- angular - ng2-charts 条形面板中缺少 barChartData backgroundColor 和 borderColor 属性
- mysql - 更新查询从库存表中减去相同的销售模型行?
- python - pandas:具有多个索引列的复杂合并操作
- selenium - 通过 Selenium 对 Web 应用程序进行 Safari 移动仿真
- c++ - 验证用户输入不显示我的 cout 无效消息。为什么?