Python在类中创建未知数量的属性

时间:2018-04-30 16:06:58

标签: python

我有以下代码。我想知道如何为我有机器人的对象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

1 个答案:

答案 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"

但我建议你不要使用它。