2015-03-25 2 views
1

Я планирую использовать пользовательский тип данных для загрузки и сохранения данных на диске. Это облегчит мою работу, так как я могу получить доступ к каждой части информации с помощью точечной нотации.Создание пользовательских объектов в Python, для хранения только данных

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

class myobj(object): 
    a=None 
    b=None 
    c=None 

    def __init__(self, a, b, c): 
     self.a=a 
     self.b=b 
     self.c=c 

который я хотел бы использовать его таким образом:

mydict = defaultdict(myobj) 
mylist = (item1, item2, item3) 

for val in mylist:  
    myobj.a = 12 
    myobj.b = "hello" 
    myobj.c = True 

    mydict[val] = myobj 

Правильно ли это или я делаю неправильно? Я хотел бы сделать это на правильном пути Python.

+0

Если вы храните данные, я бы рекомендовал 'pickle'. В нем хранятся многие типы данных python. – Zizouz212

+0

Возможно рассол. –

+0

У вас есть немало ошибок в коде. Сначала не используйте список как имя переменной. Во-вторых, ваш __init__ отсутствует. в-третьих, все ваши myobj одинаковы, поскольку вы используете переменные класса, а не экземпляры. Не могли бы вы уточнить, что вы хотите сделать, от сохранения данных на диске. – Marcin

ответ

2

Основываясь на моем комментарии выше, я изменил ваш пример кода, чтобы он был «более» ОК.

class myobj(object): 

    def __init__(self, a, b, c): 
     self.a=a 
     self.b=b 
     self.c=c 

mydict = {} 
a_list = [1, 2, 3] 

for val in a_list: 
    mydict[val] = myobj(12, "hello", True) 

Он ничего не сохраняет на диске, но его хорошее начало. Если бы вы могли уточнить, что и как вы хотите сохранить объект, или какие данные, чем, может быть, я мог бы помочь лучше.

альтернативная версия:

class myobj(object): 

    def __init__(self, a=0, b="", c=False): 
     self.a=a 
     self.b=b 
     self.c=c 

mydict = {} 
a_list = [1, 2, 3] 

for val in a_list: 
    an_myobj = myobj() 

    an_myobj.a = 12 
    an_myobj.b = "hello" 
    an_myobj.c = True 

    mydict[val] = an_myobj 
+0

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

+0

Да, но вам придется проектировать myobj по-разному. Как сейчас, вы не можете. – Marcin

+0

Это то, к чему я стремлюсь; как в моем примере в вопросе. Тип данных, которые я буду хранить в пользовательском объекте, это в основном int, строки и bool; это может происходить из разных источников, и поэтому я предпочел бы иметь точечную нотацию по практическим соображениям. –

Смежные вопросы