Python 错误消息-(AttributeError:Worm实例没有属性';vx';)是什么意思?我如何修复它?

Python 错误消息-(AttributeError:Worm实例没有属性';vx';)是什么意思?我如何修复它?,python,pygame,Python,Pygame,我一直在跟踪,但不断出现以下错误 AttributeError:蠕虫实例没有属性“move” 我不确定它到底意味着什么,也不知道如何修复它。错误指向底部的第44行。该行是w.move()(下面是已解决的问题) 导入pygame 类蠕虫: “虫子。” 定义初始(自、曲面、x、y、长度): self.surface=曲面 self.x=x self.y=y self.length=长度 self.dir_x=0 self.dir_y=-1 self.body=[] self.crash=False

我一直在跟踪,但不断出现以下错误
AttributeError:蠕虫实例没有属性“move”

我不确定它到底意味着什么,也不知道如何修复它。错误指向底部的第44行。该行是
w.move()
(下面是已解决的问题)

导入pygame
类蠕虫:
“虫子。”
定义初始(自、曲面、x、y、长度):
self.surface=曲面
self.x=x
self.y=y
self.length=长度
self.dir_x=0
self.dir_y=-1
self.body=[]
self.crash=False
def钥匙事件(自身、事件):
“”“处理影响蠕虫的密钥事件。”“”
如果event.key==pygame.K_UP:
self.dir_x=0
self.dir_y=-1
elif event.key==pygame.K_向下:
self.dir_x=0
self.dir_y=1
elif event.key==pygame.K_向下:
self.dir_x=-1
self.dir_y=0
elif event.key==pygame.K_向下:
self.dir_x=1
self.dir_y=0
def牵引(自):
对于self.body中的x,y:
self.surface.set_在((x,y),(255,255,255))
宽度=640
高度=400
screen=pygame.display.set_模式((宽度、高度))
clock=pygame.time.clock()
运行=真
w=蜗杆(屏幕,宽度/2,高度/2200)
运行时:
屏幕填充((0,0,0))
w、 移动()
w、 画()
如果w.x=宽度-1或w.y=高度-1:
打印“崩溃”
运行=错误
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
elif event.type==pygame.KEYDOWN:
w、 关键事件(事件)
pygame.display.flip()
时钟滴答作响(240)
----------改变--------

代码:

导入pygame
类蠕虫:
“虫子。”
定义初始(自、曲面、x、y、长度):
self.surface=曲面
self.x=x
self.y=y
self.length=长度
self.dir_x=0
self.dir_y=-1
self.body=[]
self.crash=False
def钥匙事件(自身、事件):
“”“处理影响蠕虫的密钥事件。”“”
如果event.key==pygame.K_UP:
self.dir_x=0
self.dir_y=-1
elif event.key==pygame.K_向下:
self.dir_x=0
self.dir_y=1
elif event.key==pygame.K_向下:
self.dir_x=-1
self.dir_y=0
elif event.key==pygame.K_向下:
self.dir_x=1
self.dir_y=0
def牵引(自):
对于self.body中的x,y:
self.surface.set_在((x,y),(255,255,255))
def移动(自我):
“移动蠕虫。”
self.x+=self.vx
self.y+=self.vy
如果(self.x,sel.y)在self.body中:
self.crash=True
self.body.insert(0,(self.x,self.y))
如果len(self.body)>self.length:
self.body.pop()
def牵引(自):
#对于x,y self.body:
#self.surface.set_在((x,y),self.color)
x、 y=自我主体[0]
self.surface.set_在((x,y),self.color)
x、 y=自身身体[-1]
自曲面设置_在((x,y),(0,0,0))
宽度=640
高度=400
screen=pygame.display.set_模式((宽度、高度))
clock=pygame.time.clock()
运行=真
w=蜗杆(屏幕,宽度/2,高度/2200)
运行时:
屏幕填充((0,0,0))
w、 移动()
w、 画()
如果w.x=宽度-1或w.y=高度-1:
打印“崩溃”
运行=错误
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
elif event.type==pygame.KEYDOWN:
w、 关键事件(事件)
pygame.display.flip()
时钟滴答作响(240)
和错误-

Traceback (most recent call last):
  File "C:/Users/Enrique/Dropbox/Public/snakegametutorial.py", line 65, in <module>
    w.move()
  File "C:/Users/Enrique/Dropbox/Public/snakegametutorial.py", line 34, in move
    self.x += self.vx
AttributeError: Worm instance has no attribute 'vx'
回溯(最近一次呼叫最后一次):
文件“C:/Users/Enrique/Dropbox/Public/snakegameturitorial.py”,第65行,在
w、 移动()
文件“C:/Users/Enrique/Dropbox/Public/snakegameturitorial.py”,第34行,移动中
self.x+=self.vx
AttributeError:蠕虫实例没有属性“vx”

AttributeError
表示您试图访问未在对象的类定义中定义的对象上的属性或方法

 43     def move(self):
 44         """ Move the worm. """
 45         self.x += self.vx
 46         self.y += self.vy
 47 
 48         if (self.x, self.y) in self.body:
 49             self.crashed = True
 50 
 51         self.body.insert(0, (self.x, self.y))
 52 
 53         if (self.grow_to > self.length):
 54             self.length += 1
 55 
 56         if len(self.body) > self.length:
 57             self.body.pop()
 58
 59     def draw(self):
 60         #for x, y in self.body:
 61         #    self.surface.set_at((x, y), self.color)
 62         x, y = self.body[0]
 63         self.surface.set_at((x, y), self.color)
 64         x, y = self.body[-1]
 65         self.surface.set_at((x, y), (0, 0, 0))
在教程代码中,您似乎没有取得足够的进展来定义
Worm.move()
方法。它出现在教程的第43行,就在
Worm.draw()之前。在
draw()
方法上,您将前往另一个
AttributeError
,因为您还没有定义该方法。只需将这两者添加到
Worm
类定义中即可

 43     def move(self):
 44         """ Move the worm. """
 45         self.x += self.vx
 46         self.y += self.vy
 47 
 48         if (self.x, self.y) in self.body:
 49             self.crashed = True
 50 
 51         self.body.insert(0, (self.x, self.y))
 52 
 53         if (self.grow_to > self.length):
 54             self.length += 1
 55 
 56         if len(self.body) > self.length:
 57             self.body.pop()
 58
 59     def draw(self):
 60         #for x, y in self.body:
 61         #    self.surface.set_at((x, y), self.color)
 62         x, y = self.body[0]
 63         self.surface.set_at((x, y), self.color)
 64         x, y = self.body[-1]
 65         self.surface.set_at((x, y), (0, 0, 0))
更新

您现在在
Worm.vx
上收到
AttributeError
,因为您缺少
Worm.vx上的属性(也是
vy
)。\uuuu init\uuuuu()
。将您的代码与教程页面标题改进游戏下的代码进行比较。当您遇到更多错误时,请将您的类定义与教程的进行比较

添加到
\uuuu init\uuuu()


dir\u x
dir\u y
是vx和vy,您应该更改它们。。。到vx和vy…

w.move()
move不存在。我试过了,但得到了新的EROR。我想我按照你说的更改了程序。。。我发布了错误和更改top@enrique2334请参阅更新。您缺少教程的
\uuuu init\uuuu()
中的vx、vy属性。请注意一般模式。一旦您理解了“实例”和“属性”的含义,一条错误消息说“X实例没有属性‘y’”,这意味着它所说的完全正确,并且非常清楚。
 43     def move(self):
 44         """ Move the worm. """
 45         self.x += self.vx
 46         self.y += self.vy
 47 
 48         if (self.x, self.y) in self.body:
 49             self.crashed = True
 50 
 51         self.body.insert(0, (self.x, self.y))
 52 
 53         if (self.grow_to > self.length):
 54             self.length += 1
 55 
 56         if len(self.body) > self.length:
 57             self.body.pop()
 58
 59     def draw(self):
 60         #for x, y in self.body:
 61         #    self.surface.set_at((x, y), self.color)
 62         x, y = self.body[0]
 63         self.surface.set_at((x, y), self.color)
 64         x, y = self.body[-1]
 65         self.surface.set_at((x, y), (0, 0, 0))
def __init__(self, surface):
    ...
    ...
    self.vx = 0
    self.vy = -1
    ...
    ...