【问题标题】:How to create and store objects of a class in a list如何在列表中创建和存储类的对象
【发布时间】:2013-04-02 06:26:34
【问题描述】:

我需要从单个类创建实例并将名称存储在列表中。

robot_list = []
for i in range (num_robots):
    robot_list.append('robot%s' %i)

这将创建一个我想用作单个类Robot 实例的名称列表。但到目前为止,它们属于str 类型。所以我写了这个来改变它们的类型并将类的实例分配给名称:

for i in robot_list:
    i = Robot()

稍后,当我想使用列表中的任何元素时,程序会返回一个AttributeError,表示该对象仍然是一个字符串。

我该如何解决这个问题?

【问题讨论】:

    标签: python list class


    【解决方案1】:
    robot_list = [Robot() for i in xrange(num_robots)]
    

    创建Robot 类的num_robots 实例并将它们存储到robot_list

    如果你想给它们“命名”,即构造函数获取一个字符串作为参数,使用这个:

    robot_list = [Robot('robot{}'.format(i)) for i in xrange(num_robots)]
    

    【讨论】:

    • 我想我会给他们一个序列号。所有变得有知觉并试图接管世界的机器人都有名字......谁听说过机器人05XJ3DSA5试图接管世界?
    【解决方案2】:

    补充其他答案:您的作业没有按您期望的方式进行。

    for i in robots_list:
        i = Robot()
    

    不会将机器人对象保存到列表中的每个索引。它将创建对象,但不会将其保存到您希望的索引,而是会覆盖临时变量i。因此列表中的所有项目都保持不变。

    【讨论】:

      【解决方案3】:

      你需要你的机器人类在初始化时使用一个字符串(作为它的名字)。请注意,当使用机器人列表时,您将作用于机器人对象,而不是其名称。然而,机器人现在将其名称存储在对象中。

      class Robot():
          def __init__(roboName = ''):
              self.name = roboName
      
          # all other class methods after this
      
      if __name__ == '__main__'
          robot_list = []
          for i in xrange (num_robots):
              robo_name = 'robot%s' % i
              robot_list.append(Robot(robo_name))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-10
        • 2015-05-07
        • 2021-08-17
        • 1970-01-01
        • 2014-08-18
        • 1970-01-01
        • 1970-01-01
        • 2017-08-31
        相关资源
        最近更新 更多