我有以下代码。我想知道如何为我有机器人的对象labyrinth
创建尽可能多的属性。我有两个疑问,如何创建属性以及如何调用该函数。任何人 ? :)
class Robot:
"""Class that represents a robot."""
def __init__(self, name, x, y):
self.name = name
self.x = x
self.y = y
class Labyrinth:
"""Class that represents a labyrinth."""
def __init__(self, obstacles, *args):
self.grid = {}
for robot in args: # First doubt
self.robot.name = [robot.x, robot.y] # First doubt
robot_1 = Robot(robot_1, 5, 6)
robot_2 = Robot(robot_2, 8, 9)
...
...
...
# unkown number of robots...
labyrinth = Labyrinth(obstacles, ......) # Second doubt
答案 0 :(得分:1)
第一个选项,使用list
存储机器人:
class Labyrinth:
def __init__(self, obstacles, robots):
self.robots = robots
labyrinth = Labyrinth(obstacles, [robot1, robot2])
第二个选项,使用args
(为方便起见,重命名为robots
):
class Labyrinth:
def __init__(self, obstacles, *robots):
self.robots = robots
labyrinth = Labyrinth(obstacles, robot1, robot2)
然后,您可以使用labyrinth.robots[i].name
访问每个机器人的名称,其中i
是您想要的机器人的索引。
如果确实想要使用动态属性,您可以执行以下操作:
class A:
def __init__(self, *args):
for idx, arg in enumerate(args):
setattr(self, 'arg_' + str(idx), arg)
a = A(1,2,3,4)
print(a.arg_0, a.arg_1, a.arg_2, a.arg_3) # print "1 2 3 4"
但我建议你不要使用它。