0

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

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

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

for i in robot_list:
    i = Robot()

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

我怎样才能解决这个问题?

4

3 回答 3

6
robot_list = [Robot() for i in xrange(num_robots)]

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

如果您想“命名”它们,即构造函数获取一个字符串作为参数,请使用以下命令:

robot_list = [Robot('robot{}'.format(i)) for i in xrange(num_robots)]
于 2013-04-10T12:10:03.297 回答
1

添加到其他答案:您的作业没有按照您期望的方式工作。

for i in robots_list:
    i = Robot()

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

于 2013-04-10T12:19:17.520 回答
0

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

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))
于 2013-04-10T12:13:20.653 回答