Python 10个矩形的列表,用于绘制每个矩形,仅绘制一个

Python 10个矩形的列表,用于绘制每个矩形,仅绘制一个,python,pygame,Python,Pygame,所以我有一个程序,应该附加一个名为Rectangle的类的10个实例,该类为矩形创建随机属性。 如果我从列表中打印多个对象,它们将显示为不同的值,但是如果我调用用于多个对象的绘图函数,屏幕上只会显示一个 for i in range(10): x = myList[i] x.draw() 以下是完整的代码: 这里重要的代码位是这些,第一个是rectangle类,第二个将一个矩形附加到空列表10次,第三个在主程序循环中,应该绘制所有10次 谢谢 一, 二, 三, 我尝试过很多不同

所以我有一个程序,应该附加一个名为Rectangle的类的10个实例,该类为矩形创建随机属性。 如果我从列表中打印多个对象,它们将显示为不同的值,但是如果我调用用于多个对象的绘图函数,屏幕上只会显示一个

for i in range(10):
    x = myList[i]
    x.draw()
以下是完整的代码:

这里重要的代码位是这些,第一个是rectangle类,第二个将一个矩形附加到空列表10次,第三个在主程序循环中,应该绘制所有10次

谢谢

一,

二,

三,

我尝试过很多不同的东西,比如这个,但每次屏幕上只有一个矩形

for i in range(10):
    x = myList[i]
    x.draw()

实际上,您正在绘制10个矩形,但它们都是相同的

您没有传递要绘制的矩形类的实例,而是传递该类本身

这是一个容易解决的问题

class Rectangle():
    x = random.randrange(0, 701)
    y = random.randrange(0, 501)
    width = random.randrange(20,71)
    height = random.randrange(20,71)
    change_x = random.randrange(-3,4)
    change_y = random.randrange(-3,4)
    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], 0)
变成:

class Rectangle():
    def __init__(self):
        self.x = random.randrange(0, 701)
        self.y = random.randrange(0, 501)
        self.width = random.randrange(20,71)
        self.height = random.randrange(20,71)
        self.change_x = random.randrange(-3,4)
        self.change_y = random.randrange(-3,4)

    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], 0)


当您构造对象的实例时,将调用
init
方法,默认情况下,该方法不起任何作用。由于您将所有这些变量/成员写入基类,而不是初始值设定项,因此该类的每个实例对所有变量/成员都具有相同的值,因为它们成为了类成员,而不是实例成员

谢谢!“我就知道会是这么简单的事情。”杰克·赖特对不起,但我这边一切都正常,你确定你抄对了吗?您是在使用
draw()
方法,还是做了其他事情?
Rectangle()
类不再具有
x
,您需要通过执行
a=Rectangle()
来创建矩形,然后可以执行
a.draw()
a.x
class Rectangle():
    x = random.randrange(0, 701)
    y = random.randrange(0, 501)
    width = random.randrange(20,71)
    height = random.randrange(20,71)
    change_x = random.randrange(-3,4)
    change_y = random.randrange(-3,4)
    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], 0)
class Rectangle():
    def __init__(self):
        self.x = random.randrange(0, 701)
        self.y = random.randrange(0, 501)
        self.width = random.randrange(20,71)
        self.height = random.randrange(20,71)
        self.change_x = random.randrange(-3,4)
        self.change_y = random.randrange(-3,4)

    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], 0)