如何为自动创建的Python类对象命名

1 投票
3 回答
2349 浏览
提问于 2025-04-17 04:13

假设我有一个叫“Map”的类,这个类在创建时需要一个参数“country”。当我实例化Map的时候,它应该根据这个国家的城市名称列表来创建一些“City”类的对象。但是,我该怎么给这些“city”对象命名呢?

伪代码:

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

用简单的话说,假设我有一个城市名称的列表:["Boston", "Chicago", "Denver"]。当我做类似这样的操作时:

us_map = Map(america)

我希望Map能够创建三个City类的实例(这个类在别的地方定义),它们的名字分别是“Boston”、“Chicago”和“Denver”。

我对这些还不太熟悉,所以可能把面向对象编程的术语搞混了。如果是这样,请纠正我。

编辑

看来我的例子让人有些困惑。我的意思是,我的问题并不是关于字典的。我只是用它作为一个例子。

我正在制作一个游戏,玩家可以上传任意数量的场景。我不知道他们会上传多少个场景。但所有的场景基本上都是以相同的方式工作,包含一些方法。所以当我创建´game = Game(folder)´时,我的类应该为每个上传的场景文件创建一个Scenario类的实例。然后,第三个类“Engine”会依次执行所有的场景……

但是,我该如何自动给“Scenario”的实例命名呢?

目前我使用´glob´来查找相关文件夹中的场景文件。所以我把这些文件放在一个列表中,放在类外面。

更新:

看来我没有把问题说清楚(我能否动态地自动创建实例),或者大家更愿意给我指个方向,而不是直接回答我的问题。无论如何,我觉得字典是个不错的选择。所以现在我就先关闭这个问题(rplnt是第一个回答的人),并把正确的答案给第一个发帖的人。

3 个回答

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))
1

基本上,你需要创建一个容器类的实例,并把它存储在你的 Map 类实例的一个属性里(也就是 self.cities)。

理想情况下,这个容器的类型应该适合你在 Map 中如何使用和处理城市的集合。比如说,城市的成员会经常被添加、删除或者修改吗?你会经常遍历这些城市吗?它们需要保持某种顺序,还是可以随时重新排序?

根据你对这些问题的回答,Python 提供了很多内置的高性能数据类型,比如列表、字典和集合,这些都可能适合你的需求。如果有必要,你也可以创建自己的容器类。

3

再说一次,就像我之前的回答一样,我建议把这些对象放在一个字典里。这样做的好处是比在命名空间中创建它们更容易管理。也就是说,如果你像你说的那样创建它们,你仍然需要知道这些对象的存在,可能需要记住它们在列表(或者字典?)中的引用。如果你想依赖于这些名字的列表,那么你的代码就会充满try语句。

撰写回答