我上了简单的课:
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?还是我总是为每个创建的类对象指定变量?
答案 0 :(得分:3)
没有内置的方式可以引用特定类的所有已创建实例。使您能够执行此操作的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
,但是从实际的角度来看,它同样有效。
答案 1 :(得分:1)
为什么不将项目存储在列表中?
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]