передавая инструкцию возврата в другую функцию в классе - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть следующий код, который я использую для отправки сообщения из учетной записи 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()

Вместо того, чтобы иметь сервер глобальной переменной, я хотел бы использовать «сервер возврата"в функции" connect ", а затем передайте сервер в функцию" quit ".Как бы я поместил это в параметр def quit (self,?)?Я обычно делаю в не объектно-ориентированной программе «def quit (self, connect)», но в этом случае я хочу иметь возможность вызывать def connect () и def quit () по отдельности.

Спасибо!

1 Ответ

2 голосов
/ 30 сентября 2011

Как насчет сделать server атрибутом каждого экземпляра GmailSmpt:

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

В конце концов, server.login использует self.usrname и self.pswd, поэтому область релевантности server связана с одним экземпляром GmailSmpt, поэтому имеет смысл сделать server атрибутом этот экземпляр также.

PS. Если вы сделаете server атрибутом self, вам также придется изменить server -> self.server в других методах.

...