Создать список объектов для использования ObjectListView [python] - PullRequest
0 голосов
/ 25 июня 2019

Я новичок в классах и в модуле Python ObjectListView.Я хочу создать текстовое редактируемое окно, используя ObjectListView, но для примера, на котором я основываю свою работу, требуются объекты, каждый из которых определяет текстовые записи строки с несколькими столбцами, которые должны быть доступны в списке, таком как этот:

names = [MyClass («Джеймс», «Кэмерон»), MyClass («Саманта», «Джонс»)]]

(обратите внимание, что кавычки только в обратном порядке с первым именеми фамилии каждой записи).

В настоящее время я храню свои имена в стандартном словаре в следующем формате:

namesDict = {"Джеймс": "Кэмерон", "Саманта": "Джонс"}

Моя попытка преобразовать мой словарь в требуемый формат находится здесь:

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

Мой код оставляет меня со следующим продуктом, который хорошо подходит, за исключением одинарных кавычеккаждая запись в списке:

['MyClass ("Джеймс", "Кэмерон")', 'MyClass ("Саманта", "Джонс")']

Я не уверен, как избавиться от этих одинарных кавычек.Я также предполагаю, что может быть стандартная методика создания объектов из словарей, о которой я просто не знаю?

1 Ответ

1 голос
/ 25 июня 2019

Кавычки указывают на то, что вы имеете дело со строковыми литералами, как и то, что вы передали в выходной список.Предполагая, что ваш 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")
...