创建由ObjectListView [python]

时间:2019-06-25 13:10:28

标签: python list objectlistview

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

  

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”)']

我不确定如何删除这些单引号。我还假设可能存在一种标准技术,可以用我根本不知道的字典来制作对象?

1 个答案:

答案 0 :(得分:1)

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

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

但是,这不会按照您期望的方式打印,它将使用object.__str__并返回object.__repr__()

<__main__.MyClass object at 0x000002571A58B400>

您可以在班级中覆盖它:

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