2010-12-08 4 views
1

У меня есть объект, который нельзя сбрасывать simplejson, поэтому мне нужно сначала создать список из него. В настоящее время это то, что я использую:Загрузить список с содержимым объекта

messages = h.flash.pop_messages() 
    items = [] 
    for message in messages: 
     item = {} 
     item['category'] = message.category 
     item['message'] = message.message 
     items.append(item) 

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

Edit:

В соответствии с просьбой, это класс для объекта Message:

class Message(object): 
    """A message returned by ``Flash.pop_messages()``. 

    Converting the message to a string returns the message text. Instances 
    also have the following attributes: 

    * ``message``: the message text. 
    * ``category``: the category specified when the message was created. 
    """ 

    def __init__(self, category, message): 
     self.category=category 
     self.message=message 

    def __str__(self): 
     return self.message 

    __unicode__ = __str__ 

    def __html__(self): 
     return escape(self.message) 
+0

Не могли бы вы показать нам код класса, который дает вам трудное время? – wheaties 2010-12-08 15:15:16

+0

Это из Pylons, и это класс сообщений от webhelpers.pylonslib – 2010-12-08 15:16:51

ответ

5
items = [{'category': m.category, 'message': m.message} 
    for m in h.flash.pop_messages()] 
+0

Спасибо Ignacio, это именно то, что мне нужно. Я решил, что это будет способ сделать это через понимание списка. – 2010-12-08 15:19:54

0

Если вы можете, то просто получить сообщение, чтобы наследовать от объекта

object предоставляет атрибут __dict__, который является словарем всех атрибутов экземпляра вашего объекта (а не атрибутов класса) или унаследованные атрибуты). Использование этого метода сделает ваш код менее вероятным, если вам нужно добавить дополнительные атрибуты в сообщение позже.

class Message(object): 

    classAttribute = None # will not feature in __dict__ 

    def __init__(self,category,message): 
     self.category = category 
     self.message = message 

messages = h.flash.pop_messages() 
items = [message.__dict__ for message in messages] 
Смежные вопросы