![](/img/trans.png)
[英]Python3 Initializing class objects to different variables and storing them in a dictionary
[英]Python3 OOP: Select all objects of a particular class w/o variables
我有簡單的課程:
class ChannelMessages:
def __init__(self, channel, date, message):
self.channel = channel
self.date = date
self.message = message
... somecode here ...
for message in messages:
ChannelMessages(name, message.to_dict()['date'], message.to_dict()['message'])
... name, date, message - is a variables ...
現在,我想選擇所有ChannelMessages
類對象並將其放在變量中。 我不需要將其保存在任何地方,我需要在我的應用程序上渲染一次此類。
我正在嘗試使用Django ORM之類的東西:
ChannelMessages.objects.all()
但是我不能用這種方式選擇它們。 因此,有沒有一種方法可以選擇所有創建的對象而無需var? 還是我總是堅持為每個創建的類對象指定變量?
沒有內置的方式可以引用特定類的所有已創建實例。 使您能夠執行此操作的API必須實現此行為。 幸運的是,您可以使用類變量非常簡單地重現此行為:
class ChannelMessages:
all_messages = []
def __init__(self, channel, date, message):
self.channel = channel
self.date = date
self.message = message
all_messages.append(self)
現在, all_messages
列表包含對該類的所有實例化對象的引用,與所有類變量一樣,您可以通過類本身( ChannelMessage.all_messages
)或通過類的任何特定實例( self.all_messages
)訪問。
一個更優雅的解決方案是使用元類並為類本身實現__iter__
,因此您可以for message in ChannelMessages
編寫for message in ChannelMessages
,但是從實際的角度來看,這也很好。
為什么不將項目存儲在列表中?
allMessages = []
for message in messages:
allMessages.append(ChannelMessages(name, message.to_dict()['date'], message.to_dict()['message'])
也可以使用列表推導在一行中完成:
allMessages = [ChannelMessages(name, message.to_dict()['date'], message.to_dict()['message']) for message in messages]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.