2017-10-23 2 views
0

Ich bin ein „Spieler“ Modul mit den foliowing Umsetzung:Fehlermeldung: Objekt enthält kein Attribut, wenn die Objekt-Attribut enthält

  • eine Validierungsfunktion
  • ein Spielerobjekt mit Benutzername und Passwort Attribute
  • ein Passwort ändern Methode für Spieler

Wenn die folgenden change_password Methode ausgeführt wird, erhalte ich eine Fehlermeldung:

while(old_password!=self.password_str): 
    AttributeError: 'Player' object has no attribute 'password_str' 

Noch definiere ich password_str als Attribut Player. Irgendwelche Ideen was passiert?

class Player(object): 

    def __init__(self, username_str="-", password_str=""): 
     while (not validated(password_str)): 
      self.password_str=input("Password is invalid. Please try again:") 
      self.username=username_str 

    def change_password(self,old_password): 
     MAX_ATTEMPT=3 
     num_of_fails=0 
     while(old_password!=self.password_str): 
      num_of_fails+=1 
      if(num_of_fails<MAX_ATTEMPT): 
       old_password=input("Thej passwword entered is invalid. Please try again. \ 
       (You have "+str(MAX_ATTEMPT-num_of_fails)+" attempts reamining)") 
      else: 
       print("Incorrect password entered too many times. Your account is temporarily locked.") 
       break 

     if(num_of_fails<MAX_ATTEMPT): 
      new_password=input("please enter a new password.") 

      while(not validated(new_password)): 
       new_password=input("New password is invalid. Please try again") 

      self.password_str=new_password 
      print("Password has been successfully changed!") 
+0

Bitte beheben Sie den Einzug in Ihrer Frage. Bitte fügen Sie auch ein Leerzeichen vor und nach '=' und '! =' Hinzu. Ihr Code ist sehr schwer zu lesen, wenn alles zusammengebrochen ist. – roganjosh

+0

Wenn du deinen Player initialisierst, wenn die Passwort-Zeichenfolge, die an __init__ übergeben wird, gültig ist, gehst du nicht in die while-Schleife, in der 'self.password_str' zugewiesen wird, also hat Player bei der Eingabe' 'kein' password_str' Änderungskennwort'. –

+1

Könnte ein Problem mit der 'valided()' Funktion sein, die Sie nicht anzeigen. – martineau

Antwort

1

Wenn das Passwort gültig ist, wird die While-Schleife nicht ausgeführt und self.password_str wird nicht initialisiert. Versuchen Sie den folgenden Code:

def __init__(self, username_str="-", password_str=""): 
    self.password_str = password_str 
    while (not validated(self.password_str)): 
     self.password_str=input("Password is invalid. Please try again:") 
     self.username=`enter code here` 
+0

Danke! Das hat den Fehler behoben. – thax

0

Wenn validated gibt Wahr zurück, um das Passwort zu __init__ besteht, wird nicht der Inhalt Ihrer while-Schleife ausgeführt werden soll, so dass die password_str und username Attribute nicht gesetzt bekommen.

Verwandte Themen