2011-10-13 109 views
1

可以说我有一个名为“Map”的类。地图由参数“国家”构建。实例化的Map应该根据国家的城市名称列表创建一些类“城市”的对象。但是,我如何命名“城市”对象呢?如何为自动创建的类对象分配名称(python)

伪代码:

class Map(object): 
    def __init__(self, country): 
     for i in range(len(citynames)): 
      cityname_i = City(i) 

在口头上: 所以可以说我有citynames的名单: “波士顿”, “芝加哥”,“掘金] 当我再这样做

us_map = Map(america) 

我想Map创建三个City类(定义在别处)的实例,命名为“Boston”,“Chigago”和“Denver”。

我是新手,所以也许我让我的词汇表OOP词汇混合起来。如果是这样,请纠正我。

编辑: 看来我的例子造成了索姆的困惑。我看到它的方式,我的问题不是关于字典。我只是以此为例。

我正在创建一个游戏,人们可以上传任意数量的场景。我不知道他们上传了多少场景。但是所有的场景基本上都以相同的方式运行,并且有很多方法。因此,当我创建'游戏=游戏(文件夹)'时,我的课程应为每个上传的场景文件创建一个课程场景的实例。然后,第三类“引擎”通过所有场景播放...

但是,如何自动将名称分配给“场景”实例?

目前我正在使用'glob'来查找相关文件夹中的场景文件。所以我把这些列在班级以外的名单上。

UPDATE:

看来,无论是我还没有做出清楚我的问题(我可以在飞行automaticcally创建实例),或者善良的人宁愿指出我在正确的方向,比回答我愚蠢的问题。反正 - 我认为字典是要走的路。所以现在我正在关闭这个问题(rplnt是第一个回答)并且给第一张海报赋予正确的答案。感谢您的帮助。

回答

3

再次,如我在先前的回答,我会把对象放在dictionary。在命名空间中创建它们的好处是它们会更容易维护。即如果你想像你说的那样创建它们,你仍然需要了解它们,可能是通过记住它们存储在列表中的引用(或者可能是字典?)。如果您想要依赖名称列表,那么您的代码将充满try语句。

+0

类似于:cities = {“Boston”:{“mayor”:“name”,“inhabitant”:“int”}}?我认为这是有道理的...将重写一些代码,并尝试:-) – Andreas

0

我会做这样的事情:

class Map(object): 

    CITIES = { "america": ["Boston", "Chicago", "Denver"], "germany": ["Munich" , ...], ...} 

    def __init__(self, country): 
     self.cities = [] 
     for city_name in Map.CITIES[country].values(): 
      self.cities.append(City(city_name)) 
+0

正如rpInt所述,它可能会更好,如果self.cities是一个字典,然后us_map.cities ['波士顿']将返回城市对象。 –

+0

对不起 - 显然我的例子不清楚...将尝试编辑我的问题。 – Andreas

1

基本上,它听起来像你需要创建某种容器类的一个实例并将其存储在您的Map类实例(即self.cities)的属性。

理想情况下,此容器的类型应该适合Map中城市的集合如何使用和/或操纵。例如,会员会被频繁地添加,删除或更改吗?他们会经常迭代吗?他们需要保持一定的顺序还是需要重新排序?

根据您对这类问题的回答,Python提供了许多内置的高性能数据类型,例如列表,字典和集合,这些可能是合适的。它还允许您在需要时创建自己的容器类。

+0

基本上我正在尝试创建一个http://learnpythonthehardway.org/book/ex43.html的卷页。将要玩游戏的人可以将场景上传到文件夹。当游戏被实例化时,应该创建每个上传场景的类。每个场景对象都有一个方法“do_it”,它返回一个值。游戏“play”方法现在循环所有场景,并将scenario1的返回值作为scenario2的参数等,直到没有更多场景。 – Andreas

相关问题