从其他类 - Python给它一个类参数

时间:2018-04-01 18:13:30

标签: python

我有一个类sendmail,我试图在其他类中调用它。argument将确定要发送的电子邮件。 sendmail类中的argument将根据从其中调用它的其他类给出的参数发送邮件。但是,在执行它时,我收到错误消息,指出argument未定义。

这是我的代码:

#!/usr/bin/python
import smtplib
class sendmail(argument):

  TO = 'yourmail@gmail.com'
  if argument=='PIR':
    SUBJECT = 'PIR'
    TEXT = 'Motion is detected'

  gmail_sender = 'mymail@gmail.com'
  gmail_passwd = 'mypwd'

  server = smtplib.SMTP('smtp.gmail.com', 587)
  server.ehlo()
  server.starttls()
  server.ehlo
  server.login(gmail_sender, gmail_passwd)

  BODY = '\r\n'.join([
       'TO: %s' % TO,
       'From: %s' % gmail_sender ,
       'Subject: %s' % SUBJECT ,
       '',
       TEXT
       ])
  try:
    server.sendmail(gmail_sender, [TO], BODY)
    print 'email sent'
  except:
    print 'error'

  server.quit()

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是静态功能。

import smtplib
class MailUtils:
    @staticmethod    
    def sendmail(argument):

          TO = 'yourmail@gmail.com'
          if argument=='PIR':
            SUBJECT = 'PIR'
            TEXT = 'Motion is detected'

          gmail_sender = 'mymail@gmail.com'
          gmail_passwd = 'mypwd'

          server = smtplib.SMTP('smtp.gmail.com', 587)
          server.ehlo()
          server.starttls()
          server.ehlo
          server.login(gmail_sender, gmail_passwd)

          BODY = '\r\n'.join([
               'TO: %s' % TO,
               'From: %s' % gmail_sender ,
               'Subject: %s' % SUBJECT ,
               '',
               TEXT
               ])
          try:
            server.sendmail(gmail_sender, [TO], BODY)
            print 'email sent'
          except:
            print 'error'

          server.quit()

你可以这样做:

import MailUtils
MailUtils.sendmail(argument)

注意:如下面的评论所述,如果类包含多个相关函数,而不仅仅是单个函数,则此方法效果最佳。