【问题标题】:Best way to assign lots of self variables to elements in a list?将大量自变量分配给列表中的元素的最佳方法?
【发布时间】:2021-12-06 21:25:55
【问题描述】:

我实际上是在尝试为列表中的每个元素分配一个不同的变量。我在下面附上了一些代码以更好地解释我的意思:

class Skill:
    def __init__(self, name):
        skill_detail = SKILLS_LIST[name].values()
        
        self.one = skill_detail[0]
        self.two = skill_detail[1]
        self.three = skill_detail[2]
        self.four = skill_detail[3]
        self.five = skill_detail[4]
        self.six = skill_detail[5]
        self.seven = skill_detail[6]
        self.eight = skill_detail[7]
        self.nine = skill_detail[8]

我曾想过切换到切片,但最好的方法是什么?任何帮助将不胜感激,谢谢!

上下文:

变量基本上是 RPG 游戏中移动的属性。诸如功率、准确性、优先级、类型、能量消耗等之类的东西。这就是为什么我觉得所有单独的属性都必须作为自变量,但还不确定。

另外,我知道全局变量/常量不好,但“SKILLS_LIST”是一个从 json 文件中提取的庞大字典,在代码中永远不会发生变异。

【问题讨论】:

    标签: python-3.x list indexing self


    【解决方案1】:

    我会说你所做的不一定是坏习惯,特别是如果你只有几个属性。

    但是您提到将数据从 JSON 文件加载到字典中,而字典已经是一种创建可变数量变量的编程方式。那么为什么不直接使用字典呢。并且每当您需要修改或读取某个属性时,您只需执行skills["power"]skills["cost"] 等即可。随着您的项目规模和复杂性的发展,这也可能更具可扩展性。

    当然,如果您无法控制所述 JSON 文件的格式,那会使事情变得复杂。在这种情况下,我认为手动加载属性没有任何问题。

    【讨论】:

    • 哦,没错,我可以只有一个自变量,也许就是整个字典。我不知道为什么我没有想到这一点,就像你说的那样,跟踪起来会容易得多。肯定会切换到那个,谢谢!
    • 没问题@Roopesh-J,很高兴我能帮上忙。编码愉快!
    【解决方案2】:

    如果您愿意,我想为此使用命名元组之类的模型类是有意义的。这样做的一个好处是它本质上只是一个元组,因此它本质上是 JSON 可序列化的,以防您需要将其转换回如下列表。

    import json
    from typing import NamedTuple
    
    
    class MyTup(NamedTuple):
        one: str
        two: str
        three: str
    
    
    c = MyTup(*["hello", "world", "!"])
    print(c)
    # MyTup(one='hello', two='world', three='!')
    print(c.two)
    # world
    print(json.dumps(c))
    # ["hello", "world", "!"]
    

    【讨论】:

    • 哦,哇,以前从未听说过 NamedTuple,它似乎非常有效,将尝试一下。谢谢!
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 2016-06-01
    • 2011-02-23
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多