2017-02-01 14 views
-1

Я пытаюсь реализовать класс с этой структурой:Как реализовать класс с несколькими уже созданными элементами?

class type_of_thing(): 
    def __init__(self, type, code, version, description, year, family): 
     self.type = type 
     self.code = code 
     self.version = version 
     self.description = description 
     self.year = year 
     self.family = family 

# with this I would create a new element of this class: 

obj_type1 = type_of_thing(type = "x", code = "WRT-001", version= "1-10", description= "custom", year = "2016", family = "class1") 
obj_type1_2 = type_of_thing(type = "x", code = "WRT-001", version= "1-11", description= "custom", year = "2016", family = "class1") 
obj_type2 = type_of_thing(type = "xy", code = "WRT-001", version= "1-12", description= "custom", year = "2016", family = "class1") 

, но я должен создать сотни этих элементов, у меня уже есть их в список, как это:

type of thing1: 

type = "x", 
code = "WRT-001", 
version= "1-10", 
description= "custom", 
year = "2016", 
family = "class1" 

type = "x", 
code = "WRT-001", 
version= "1-11", 
description= "custom", 
year = "2016", 
family = "class1" 

type of thing2: 

type = "xy", 
code = "WRT-001", 
version= "1-12", 
description= "custom", 
year = "2016", 
family = "class1" 

type = "xy", 
code = "WRT-001", 
version= "1-10", 
description= "custom", 
year = "2016", 
family = "class1" 

type of thing3: 
... 
... 
... 

Lets сказать, что я мог бы поставить их в списки, как это:

type_of_thing1 = ["x","WRT-001","1-10","custom","2016","class1"] 
type_of_thing1_2 = ["x","WRT-001","1-11","custom","2016","class1"] 
type_of_thing2 = ["xy","WRT-001","1-12","custom","2016","class1"] 
type_of_thing3 = ["...","...","...","...","..","..."] 

Так что я пытаюсь найти вещий способ осуществить это с помощью класса и избегать, чтобы создать кучу OBJE cts или список списков для хранения всех комбинаций типов вещей, которые у меня есть.

Было бы лучше управлять им, как списком, и доступ к его элементам по положению вместо создания класса? Как вы думаете, что я мог бы сделать что-то еще, чтобы улучшить свой код?

+0

Пожалуйста [править] Ваш вопрос, и включают в себя точно содержание по меньшей мере части списка, который уже есть, потому что будет необходимо для обеспечения конкретный ответ. – martineau

+0

лучше использовать список или словарь - он помогает работать с этим. – furas

+0

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

ответ

0

Предполагая, что эти списки является текстовой строкой, вы можете просто разобрать этот список и поместить в dict. Вот пример:

txt='''\ 
type = "x", 
code = "WRT-001", 
version= "1-10", 
description= "custom", 
year = "2016", 
family = "class1" 

type = "x", 
code = "WRT-001", 
version= "1-11", 
description= "custom", 
year = "2016", 
family = "class1"''' 

for block in txt.split('\n\n'): 
    di={} 
    for line in block.splitlines(): 
     k,v=[e.strip().strip('"') for e in line.rstrip().rstrip(',').split('=')] 
     di[k]=v 
    print(di) 

Печать:

{'type': 'x', 'code': 'WRT-001', 'version': '1-10', 'description': 'custom', 'year': '2016', 'family': 'class1'} 
{'type': 'x', 'code': 'WRT-001', 'version': '1-11', 'description': 'custom', 'year': '2016', 'family': 'class1'} 

Тогда вызов, который вы конструктор класса с Dict ди.


На основе вашего редактирования, вы можете сделать:

>>> keys=['type', 'code', 'version', 'description', 'year', 'family'] 
>>> vals=["x","WRT-001","1-10","custom","2016","class1"] 
>>> {k:v for k,v in zip(keys, vals)} 
{'type': 'x', 'code': 'WRT-001', 'version': '1-10', 'description': 'custom', 'year': '2016', 'family': 'class1'} 
+0

Спасибо, поэтому я думаю, что из-за ответов, которые у меня есть, неплохо иметь класс, и я могу сделать это, чтобы иметь словарь или список. –

-1

Python хранит глобальные переменные в globals(), вы также говорили о списке информации, вы можете перебирать этот список, добавляя классы в globals().

list_of_things = [("x","WRT-001","1-10","custom","2016","class1"), 
        ("x","WRT-001","1-11","custom","2016","class1"), 
        ("xy","WRT-001","1-12","custom","2016","class1")] 

class type_of_thing(): 
    def __init__(self, type, code, version, description, year, family): 
     self.type = type 
     self.code = code 
     self.version = version 
     self.description = description 
     self.year = year 
     self.family = family 

for i,thing in enumerate(list_of_things): 
    globals()["thing_"+str(i)] = type_of_thing(thing[0],thing[1],thing[2],thing[3],thing[4],thing[5]) 

print(thing_0) 

Этот код будет создавать переменное имя thing_0 в thing-<Number of list indicies>, а затем напечатать первую, thing_0.

Надеюсь, это поможет! Если это не то, что вы искали, скажите мне.

Дополнительно Это не очень pythonic. :/

Спасибо :)