【问题标题】:Dynamically instantiate Player class in a loop在循环中动态实例化 Player 类
【发布时间】:2011-01-20 23:49:16
【问题描述】:

我正在制作一个简单的 Python 游戏。我有一个文本文件,每行包含以下内容:

player name, player IP, player health, player items

我有一个循环遍历文件中的每一行并获取每个播放器的变量(文本文件中的每一行都是一个播放器)。

我有一个名为Player 的类,我需要为每个播放器创建一个实例。我希望有一个包含所有播放器实例的列表。

【问题讨论】:

    标签: python list loops


    【解决方案1】:

    Sven 有一个很好的答案,但你甚至可以去掉第一行,直接做

    config = [line.split(',') for line in open("config")]
    

    或者您可能想要实际实例化播放器:

    config = [Player(line.split(',')) for line in open("config")]
    

    如果您要为游戏做更多的 csv 配置,请查看 csv 模块。

    【讨论】:

    • 我不是在问如何将数据从文件中拆分出来——我已经做到了。我在问如何在循环中为每个玩家实例化我的类。
    • 感谢您的更新,所以 config 变量应该是一个数组,其中 config[0] = 第一个播放器对象,config[43] 第 44 个播放器对象,等等。
    • 不要使用循环,使用上面的列表理解。
    【解决方案2】:

    你需要做的是使用map函数调用构造函数并将你在配置文件中读取的内容扩展为实例化的参数:

    players = map(lambda tuple_args: Player(*tuple_args), (line.split(',') for line in open("config"))) 
    

    或更简单的使用列表推导:

    players = [Player(*(line.split(','))) for line in open("config")]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 2019-11-08
      • 1970-01-01
      • 2019-08-07
      • 2011-11-27
      • 1970-01-01
      相关资源
      最近更新 更多