【问题标题】:How to use a variable "holding" a string value as list name?如何使用变量“保存”字符串值作为列表名称?
【发布时间】:2019-03-26 11:12:54
【问题描述】:

我要传递给类 init 的参数之一是具有字符串值的变量。此字符串值是列表的名称。 init 应该使用此字符串值将类对象附加到该列表。我做错了什么?

我尝试过使用 locals() 和 globals() 但它以“TypeError: unhashable type: 'list'”结尾。也试过 vars() 也没用。

refList = []
cmpList = []

class Part(object):
    def __init__(self, origin, name, type, listName):
        self.origin = origin
        self.name = name
        self.type = type
        partListName = locals()[listName]
        partListName.append(self)

#... some file parsing..

part1 = Part((str(origin), str(name) ,str(type), 'refList') 

# ... some other file parsing ...

part2 = Part((str(origin), str(name) ,str(type), 'cmpList')

【问题讨论】:

  • 首先,你应该根据PEP8将你的类名重命名为class Part
  • 第二,你为什么要那样做?您这样做的方法或最终目标是什么?
  • 感谢您的重播和澄清。我期待从两个不同的文件生成大量对象。我想找到两个文件之间不同的特定对象。使用列表可以实现快速查找。 (o(n) )

标签: python-3.x string list variables


【解决方案1】:

欢迎使用 SO Ram! 我认为您应该重新考虑您的代码,因为这不是始终这样做的好方法。最好直接传递列表或相关的东西。

但是,您的代码问题是您应该使用 globals() 函数。我真的建议您查看下一篇文章,以便更多地了解如何/何时使用 Python3 的这一有用功能。

此外,您必须使用 global 关键字声明变量,因为您将从 Part 类中引用此变量。

global refList = []
global cmpList = []

说了这么多,你的关键代码行应该是这样的:

partListName = globals()[listName]

【讨论】:

    猜你喜欢
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多