2013-02-28 4 views
1

Ok, так что я пытаюсь напечатать все объекты автомобиля ... У меня 2 вопроса:как use__iter__ динамически создавать объекты в питона

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

Вот мой код:

import sqlite3 

class Database: 

    def __init__(self, **kwargs): 
    self.filename = kwargs.get('filename') 

    def __iter__(self): 
     car_object = {} 
     cursor = self._db.execute('select * from CARS'.format(self._table)) 
     for row in cursor: 
      objectname = str(row['IDENT']) 
      car_object[objectname] = Cars(make = row['MAKE'], 
      model = row['MODEL'], disp = row['DISPLACEMENT'], 
      power = row['POWER'], luxury = row['LUXURY']) 
      yield dict(row) 

    @property 
    def filename(self): 
     return self._filename 

    @filename.setter 
    def filename(self, fn): 
     self._filename = fn 
     self._db = sqlite3.connect(fn) 
     self._db.row_factory = sqlite3.Row 


class Cars: 
    def __init__(self, **kwargs): 
     self.variables = kwargs 

    def set_Variable(self, k, v): 
     self.variables[k] = v 

    def get_Variable(self, k): 
     return self.variables.get(k, None) 

def main(): 
    db = Database(filename = 'insurance.sqlite') 
    print ('IDENT      MAKE    MODEL     
    DISPLACEMENT    POWER    LUXURY') 
    for item in db: 
     print(item['IDENT'], '   ', item['MAKE'], '   ', 
      item['MODEL'],'   ', item['DISPLACEMENT'], 
      '   ', item['POWER'],'   ', item['LUXURY']) 


if __name__ == "__main__": main() 
+0

Ваш отступ выглядит неверным. Это не источник вашей ошибки, это просто проблема форматирования с вопросом. –

+0

@Bryan Oakley ... он отлично выглядит в затмении, но эта страница просто заставляет его выглядеть странно. – engr007

+1

Никто не будет смотреть на ваш код в затмении. Пожалуйста, уделите время правильному форматированию вопроса. Самый простой способ - преобразовать все вкладки в пробелы, прежде чем вставлять их в вопрос. –

ответ

2

Вы не хотите, чтобы распечатать сам генератор, вы хотите напечатать каждый элемент, возвращаемый генератором.

for item in db: 
    print(item) 
+0

спасибо .... вы считаете приемлемым иметь «__iter__», как я делаю выше? – engr007

+0

@ user2096860 Я никогда раньше не использовал '__iter__', поэтому мне пришлось искать его. Да, я думаю, что вы используете его правильно, имея «выход» в теле, функция возвращает генератор, который именно то, что вам нужно. Я не уверен, почему вы оба возвращаете результаты и сохраняете их внутренне. –

+0

Ransomactually, я хочу иметь возможность распечатать экземпляры car_object [objectname] ... любые идеи? – engr007

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