【问题标题】:Access objects stored in list访问存储在列表中的对象
【发布时间】: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)class obstacle(不是该类的 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() 这样的实例。

标签: python list class object


【解决方案1】:

创建类的实际实例。定义__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)

【讨论】:

  • 非常感谢!这对我有很大帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2020-01-19
  • 2015-04-30
相关资源
最近更新 更多