首页 > 解决方案 > Python3 OOP:选择不带变量的特定类的所有对象

问题描述

我有简单的课程:

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()

但我不能这样选择它们。那么有没有办法选择所有创建的对象 w\o vars?或者我总是为每个创建的类对象指定变量?

标签: pythondjangopython-3.xoop

解决方案


没有内置方法可以引用特定类的所有已创建实例。使您能够执行此操作的 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,但从实际的角度来看,这同样适用。


推荐阅读