如何在Python中命名我的对象?

时间:2011-05-17 14:53:07

标签: python

我知道这是一个非常简单的问题,但不幸的是我不知道足以有效地搜索答案。我应该已经知道的任何答案或链接将非常感激。

我想要做的是在Python中创建一个环境,我有一堆乌龟在做各种事情(它基本上就像麻省理工学院的StarLogo)。

class Turtle:
    def __init__(self,x,y):
        self.xpos = float(x)
        self.ypos = float(y)
        self.head = 0.0

numTurtles = 4
for i in range(numTurtles):
    ...
MyTurtles = [...]

每只乌龟都有一个x位置,一个y位置和一个标题(以弧度表示)。我想做的就是创建它们并告诉它们站在哪里(它们的x和y坐标),然后将所有的乌龟放入一个列表中,以便稍后我可以告诉整个组采取某种行动。

我希望能够改变海龟的数量,否则我只会称它们为[a,b,c,d]。但我认为必须有更好的方法。

4 个答案:

答案 0 :(得分:6)

您应该在执行循环时直接将海龟添加到列表中,例如

my_turtles = []
for i in range(num_turtles):
    x = ...
    y = ...
    h = ...
    my_turtles.append(Turtle(x, y, h))

通常也可以将其写为“列表理解”:

my_turtles = [Turtle(..., ..., ...) for i in range(num_turtles)]

答案 1 :(得分:2)

如果您希望某些唯一名称可以访问它们,但避免使用十亿个变量,则可以始终将它们存储在dict内。

{ "Norma": Turtle(1, 2), "Kyle": Turtle(3, 4) }

您可以根据需要修改字典,添加和删除字典。

turtles["Norma"] = Turtle(30, 40) # we just replaced Norma
turtles["Rackham"] = Turtle(0, 1) # a new turtle added.

如果您不想手动制作,可以通过多种方式生成这样的字典。

使用zip我们可以进行两次迭代,并从连续值中成对:

zip(["Norma", "Rackham"], [Turtle(1, 2), Turtle(0, 1)])

结果是一个可循环的返回元组(维度由给zip的参数数量决定。)

很容易,字典构造函数可以采用这样的列表:

dict(zip(["Norma", "Rackham"], [Turtle(1, 2), Turtle(0, 1)]))

Etvoilá。字典。

您还可以使用字典表达式(可用性取决于Python版本):

{ name: turtle for name, turtle in zip(names, turtles) }

答案 2 :(得分:0)

class Turtle(object):
    def __init__(self,x,y,name):
        self.xpos = float(x)
        self.ypos = float(y)
        self.head = 0.0
        self.name = name

my_turtles = []
for name, i in zip(xrange(num_turtles), names):
    x = ...
    y = ...
    h = ...
    my_turtles.append(Turtle(x, y, h, name))

答案 3 :(得分:0)

class Turtle:
    def __init__(self,x,y):
        self.xpos = float(x)
        self.ypos = float(y)
        self.head = 0.0
    def certain_action():
        # Do action

numTurtles = 4
MyTurtles = []
# Need to set x and y
for i in range(numTurtles):
    MyTurtles.append(Turtle(x,y))

for t in MyTurtles:
    t.certain_action()