python - 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?或者我总是为每个创建的类对象指定变量?
解决方案
没有内置方法可以引用特定类的所有已创建实例。使您能够执行此操作的 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
,但从实际的角度来看,这同样适用。
推荐阅读
- office365 - Office.context.roamingSettings.get 返回未定义
- pyqt5 - 如何将数据从一个窗口发送到另一个窗口
- javascript - 有没有办法使用漂亮的汤来过滤掉嵌入在 JavaScript 中的产品 id
- php - 我想从查询结果中获取带有 PDO 的 suplicated 列名
- php - 为什么我制作的循环只产生一个值?
- svn - svnsync: E020014: 无法为 URL '/svn/MyRepo/!svn/rev/37' 找到标签 'NULL'
- html - Hexo 博客中的 Markdown 文本对齐
- c++ - 使用删除运算符时程序停止工作
- haskell - 带有 $ 的 Haskell 偏函数应用程序
- python - Python 3 Tkinter 消息框复制循环