【发布时间】:2021-03-17 16:10:36
【问题描述】:
我不确定我是否已正确完成所有操作,但我想访问存储在列表中的对象。代码如下:
# Obstcale class
class obstacle(object):
def __init__(self, obstacleImg, obstacleX, obstacleY, obstacelX_change):
self.obstacleImg = pygame.image.load("rock.png")
self.obstacleX = random.randint(600, 700)
self.obstacleY = random.randint(0, ScreenHeight - 64)
self.obstacleX_change = -0.3
def spawn_obstacle(self, x, y):
screen.blit(self.obstacleImg, (x, y))
while running:
if count < 1299:
count += 1
else:
obstacle_number += 1
obstacle_list.append(obstacle)
count = 0
print(obstacle_list[obstacle_number-1])
使用打印功能,我想打印出通过访问列表创建的每个新对象,但我得到的一切都是这样的:
<class '__main__.obstacle'>
<class '__main__.obstacle'>
<class '__main__.obstacle'>
<class '__main__.obstacle'>
<class '__main__.obstacle'>
<class '__main__.obstacle'>
【问题讨论】:
-
“我想打印出每个创建的新对象” - 你在那个循环中创建了零个新对象。
-
如果你想创建
obstacle的实例,你将不得不调用类,并且你将不得不修复你的__init__- 它被定义为获取一堆它完全忽略的参数。 -
obstacle_list.append(obstacle)将 classobstacle(不是该类的 instance!)附加到列表中。要创建类的实例,通常使用obstacle(arg1, arg2, ...) -
@TimoMeyer,这取决于
obstacleImg, obstacleX, obstacleY, obstacelX_change方法中obstacleImg, obstacleX, obstacleY, obstacelX_change参数的含义。基本上,您创建一个类的实例并使用语法obstacle(arg1, arg2, arg3, arg4)调用__init__,所以就像您调用函数时一样,但是您需要知道这些参数需要是什么,您需要提供它们 -
@TimoMeyer,好吧,如果你的
__init__无论如何都没有使用它的任何参数,也许它实际上不需要任何参数? (当然,self除外)。然后你会创建一个像obstacle()这样的实例。