2017-08-27 275 views
1

我想为my_list的每个项目调用drawmove方法。我试过my_objects.draw()my_objects.move()而不是i.draw()i.move(),但我总是得到相同的错误。这里是我的代码:Python - Pygame AttributeError:int object has no attribute'draw'

import pygame 
import random 

BLACK = (0, 0, 0) 
GREEN = (0, 255, 0) 

class Rectangle(): 
    def __init__(self): 
     self.x = random.randrange(0, 700) 
     self.y = random.randrange(0, 500) 
     self.height = random.randrange(20, 70) 
     self.width = random.randrange(20, 70) 
     self.change_x = random.randrange(-3, 3) 
     self.change_y = random.randrange(-3, 3) 

    def move(self): 
     self.x += self.change_x 
     self.y += self.change_y 

    def draw(self): 
     pygame.draw.rect(screen, GREEN, [self.x, self.y, self.width, self.height]) 

my_list = [] 

for number in range(10): 
    my_object = Rectangle() 
    my_list.append(my_object) 

pygame.init() 

screen = pygame.display.set_mode((700, 500)) 
done = False 
clock = pygame.time.Clock() 

while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 

    screen.fill(BLACK) 

    for i in range(len(my_list)): 
     number.draw() 
     number.move() 

    pygame.display.flip() 
    clock.tick(60) 

pygame.quit() 

以下是错误:

Traceback (most recent call last): 
    line 53, in <module> 
    number.draw() 
AttributeError: 'int' object has no attribute 'draw' 
+0

检查压痕请,但我看来,'当你在做range'为'数number'创建和数量是这样 – Y0da

回答

1

你通过索引迭代。但你真的想遍历项目。所以你不需要range(len(...))建设。请使用for item in items。试试这个:

for rect in my_list: 
    rect.draw() 
    rect.move() 
+0

谢谢你,它的工作一个int这解释了错误!这意味着我不需要范围(len(my_list))? – Miray

+0

@Miray,对。 'range(len(my_list))'创建一个从0到9的数字范围,''i'接收这些值。 –

+0

@Miray如果你遍历一个'range',它给你的元素将是该范围内的一个数字,并且数字没有绘制方法。如果你遍历'my_list'本身,你会得到'my_list'的每个元素,这大概确实有绘制方法。 – Carcigenicate

相关问题