我正在尝试解析gmail电子邮件。来自http://yuji.wordpress.com/2011/06/22/python-imaplib-imap-example-with-gmail/我有以下内容:
def get_first_text_block(self, email_message_instance):
maintype = email_message_instance.get_content_maintype()
if maintype == 'multipart':
for part in email_message_instance.get_payload():
if part.get_content_maintype() == 'text':
return part.get_payload()
elif maintype == 'text':
return email_message_instance.get_payload()
def hello(request):
....
first = qs[0]
one = first.get_email_object()
print one['To']
out = get_first_text_block(one)
我得到了:
get_first_text_block() takes exactly 2 arguments (1 given)
我做错了什么?
答案 0 :(得分:5)
self
通常用于实例方法,将实例的指针传递给函数。
嗯,我们似乎不需要它。你可以省略它:
def get_first_text_block(email_message_instance):
maintype = email_message_instance.get_content_maintype()
if maintype == 'multipart':
for part in email_message_instance.get_payload():
if part.get_content_maintype() == 'text':
return part.get_payload()
elif maintype == 'text':
return email_message_instance.get_payload()
我不知道你从哪里获得此代码,但我希望这可以按预期工作!
答案 1 :(得分:3)
您必须通过View实例调用该函数。
Django用户在编写url模式时不实例化类视图是一个常见错误。如果你有“MyView”视图,你必须提供一个实例MyView()到url模式。
如果你有一些课程:
class SomeClass:
def some_function(self, foo): pass
你必须这样称呼它:
some_instance = SomeClass()
some_instance.some_function(foo)
如果你这样称呼它:
SomeClass.some_function(富)
你实际上没有将对象(self)作为第一个param传递给some_function。
答案 2 :(得分:2)
您已将get_first_text_block定义为将'self'作为第一个参数,因为它是一个实例方法。但它实际上只是一个功能。使函数定义如下所示:
def get_first_text_block(email_message_instance):
它会起作用。
答案 3 :(得分:2)
self
参数仅在将函数定义为类方法时使用。
因此,如果您希望您的函数成为模块中的全局函数,则应将其删除。
除了你的代码,我不明白为什么你需要一个参数self
?