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 に答える