首页 > 解决方案 > 访问存储在列表中的对象

问题描述

我不确定我是否已正确完成所有操作,但我想访问存储在列表中的对象。这是代码:

# 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'>

标签: pythonlistclassobject

解决方案


创建类的实际实例。定义一个__repr__(调试表示)以对实例进行有意义的显示也有帮助。以下是将您的代码修改为一个最小的、可重现的示例,创建一个简短的障碍列表:

import random

ScreenHeight = 600

class Obstacle(object):

    def __init__(self): # removed unused parameters
        self.obstacleImg = 'rock.png' # pygame.image.load("rock.png")
        self.obstacleX = random.randint(600, 700)
        self.obstacleY = random.randint(0, ScreenHeight - 64)
        self.obstacleX_change = -0.3

    def __repr__(self):
        return f'Obstacle(image={self.obstacleImg!r}, X={self.obstacleX}, Y={self.obstacleY}, change={self.obstacleX_change})'
    
obstacle_list = []
while len(obstacle_list) < 5:
    obstacle = Obstacle()  # call the class to create an instance
    obstacle_list.append(obstacle)
    print(obstacle)
Obstacle(image='rock.png', X=650, Y=62, change=-0.3)
Obstacle(image='rock.png', X=677, Y=8, change=-0.3)
Obstacle(image='rock.png', X=625, Y=370, change=-0.3)
Obstacle(image='rock.png', X=642, Y=536, change=-0.3)
Obstacle(image='rock.png', X=688, Y=311, change=-0.3)

推荐阅读