gpt4 book ai didi

Python 类和迭代

转载 作者:行者123 更新时间:2023-11-30 23:45:14 25 4
gpt4 key购买 nike

我正在使用标准 Python 邮箱模块从 Maildir 读取消息。阅读后,我解析它们并将结果存储在字典中。我已将此功能放入一个类中并使用 __getitems__使我的程序的其他组件能够访问它们。这工作得很好,我很高兴我的代码既实用又可读。

我的问题是如何将其从一次解析一条消息的类转变为迭代 Maildir 中每条消息的类。一种简单的解决方案是在主程序中放置一个 for 循环并使用mailbox.iterkeys:

inbox = mailbox.Maildir('Maildir')
for key in inbox.iterkeys():
mailparse.process(inbox, key)

这可行,但对我来说它看起来不太整洁。我希望在类中拥有所有与 maildir 相关的功能,而不是必须将每个 maildir 键传递给它。像这样的东西:

class mailparse():
def __init__(self, mdirpath):
inbox = mailbox.Maildir(mdirpath)

def __getitems__(self, key):
return self.dictionary[key]

def process():
for key in inbox.iterkeys()
....

for x in Mailprocess:
....

显然我上面的代码不起作用,但我认为必须有一个解决方案,以完全独立包含类中的功能 block 。

最佳答案

我的设置非常不同。如果您确实想要一个可迭代的类来处理这个问题,

class MailboxParser(object):
def __init__(self, mbox):
self.mbox = mbox

def __getitem__(self, key):
return self._process(key, self.mbox[key])

def __iter__(self):
for key, val in self.mbox.iteritems():
yield self._process(key, val)

def _process(self, key, content):
"""Do whatever on a single message"""

__iter__ 成员允许您执行以下操作

for x in MailboxParser(mbox):
# now x is the result of processing a single message

关于Python 类和迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9669738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com