2016-07-10 8 views
0
nicht setzen

Ich versuche meine Eigenschaften zu testen, aber es funktioniert nicht und ich habe keine Ahnung warum.Warum bekomme ich diese Fehler? AttributeError: kann das Attribut

import smtplib 

class EmailService(object): 

    def __init__(self): 
     self._sender=None 
     self._receiver=None 
     self._message=None 

    @property 
    def sender(self): 
     return self._sender 

    @sender.getter 
    def sender(self, sender): 
     self._sender = sender 

    @property 
    def receiver(self, receive): 
     return self._sender 

    @receiver.getter 
    def receiver(self, receiver): 
     self._receiver = receiver 

    @property 
    def message(self, message): 
     return self._message 

    @message.getter 
    def message(self, message): 
     self._message = message 




def main(): 
    smtp=EmailService() 

    smtp.sender="kevin" 
    smtp.receiver="alvin" 
    print(smtp.message +" "+ smtp.sender+" " + smtp.receiver) 

if __name__=="__main__": 
    main() 
+4

Sie haben '@ sender.getter' anstelle von' @ sender.setter' geschrieben. –

Antwort

1

Die mit @property gewickelten Methoden sind bereits Ihr getter s.

So ersetzen @receiver.getter mit @receiver.setter, um die entsprechenden Methoden zu machen setter s

1

AttributeError: can't set attribute

Dies geschieht, weil Sie die sender und receiver Attribute setzen möchten, jedoch haben Sie nicht Setter für sie.

Sie müssen ersetzt werden:

  • @sender.getter mit @sender.setter
  • @receiver.getter mit @receiver.setter
  • @message.getter mit @message.setter

Der @property Dekorateur macht, dass die Getter-Methode. Die Setter müssen im Format sein - @<property_name>.setter

So beheben Sie die falsche @<name>.getter s mit @<name>.setter s.

Verwandte Themen