【问题标题】:passing a return statement into another function in a class将 return 语句传递给类中的另一个函数
【发布时间】:2011-11-28 03:33:59
【问题描述】:

我使用以下代码从一个 gmail 帐户向另一个 gmail 帐户发送消息:

 import smtplib

 class GmailSmpt:

    global server
    server = smtplib.SMTP('smtp.gmail.com','587')
    def __init__(self,sendfrom,sendto,usrname,pswd):
        self.sendfrom = sendfrom
        self.sendto = sendto
        self.usrname = usrname
        self.pswd = pswd
    def connect(self):
        msg = 'this is a test message'
        server.starttls()
        server.login(self.usrname,self.pswd)
        server.sendmail(self.sendfrom,self.sendto,msg)
        print ("your email has been sent")
    def quit(self):
        server.quit()



    first = GmailSmpt('sendfrom','sendto',
    'usrname','pswd')

    first.connect()
    first.quit()

我想在“连接”函数中使用“返回服务器”,然后将服务器传递给“退出”函数,而不是使用全局变量服务器。我如何将它放入 def quit(self, ?) 的参数中?我在非面向对象程序中通常会做的是“def quit(self,connect),但在这种情况下,我希望能够分别调用 def connect() 和 def quit()。

谢谢!

【问题讨论】:

    标签: python class function return


    【解决方案1】:

    如何让server 成为GmailSmpt 的每个实例的属性:

    class GmailSmpt:
        def __init__(self,sendfrom,sendto,usrname,pswd):
            self.server = smtplib.SMTP('smtp.gmail.com','587')
            ...
    

    毕竟server.login使用self.usrnameself.pswd,所以server的相关域绑定到GmailSmpt的一个实例,所以将server作为一个属性是有意义的那个实例也是。

    PS。如果您将server 设为self 的属性,那么您还必须在其他方法中更改server --> self.server

    【讨论】:

    • 非常感谢。这很有意义。我刚刚开始学习课程,所以这很有帮助。
    猜你喜欢
    • 2013-10-12
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2019-07-14
    相关资源
    最近更新 更多