创建供 ObjectListView 使用的对象列表 [python]

Create list of objects for use by ObjectListView [python]

我是 类 和 python 模块 ObjectListView 的新手。 我希望使用 ObjectListView 创建一个文本可编辑的 window,但是我的工作所基于的示例需要每个定义多列行的文本条目的对象应该可以在这样的列表中访问:

names = [MyClass("James", "Cameron"), MyClass("Samantha", "Jones")]

(请注意,引号仅用于书尾每个条目的名字和姓氏)。

我目前将我的名字保存在标准字典中,格式如下:

namesDict = { "James":"Cameron", "Samantha":"Jones"}

我尝试将我的词典转换为所需格式的尝试如下:

namesDict = { "James":"Cameron","Samantha":"Jones"}
out = []
for key in namesDict:
out.append("MyClass(\""+key+"\",\""+namesDict[key]+"\")")
print(out)

我的代码给我留下了以下产品,除了列表中每个条目周围的单引号外,这一切都很好:

['MyClass("James","Cameron")','MyClass("Samantha","Jones")']

我不确定如何去掉这些单引号。我还假设可能有一种标准技术可以从我根本不知道的字典中制作对象?

引号表示您正在处理字符串文字,因为这是您传递给输出列表的内容。假设您的 MyClass 构造函数有两个参数,您可以将一个实例添加到列表中,例如:

out.append(MyClass(key, namesDict[key])

但是,这不会 打印 您期望的方式,它将使用 object.__str__ which returns object.__repr__():

<__main__.MyClass object at 0x000002571A58B400>

您可以在 class 中覆盖它:

class MyClass:
    def __init__(self, first, last):
        self.first = first
        self.last = last
    def __str__(self):
        return self.__class__.__name__ + '("' + '","'.join([str(v) for k,v in vars(self).items()]) + '")'

然后 MyClass 的实例将被整齐地打印出来:

>>> m = MyClass('James','Cameron')
>>> print(m)
MyClass("James", "Cameron")