2017-03-09 1 views
0

J'ai récemment commencé à apprendre Python et j'ai rencontré une erreur avec les classes et le "self" n'étant pas défini. Je sais qu'il y a beaucoup de questions sur ce problème, mais je n'ai pas pu trouver le problème avec mon code basé sur ces réponses.Erreur Python - "self" n'est pas défini

import random 

class Encrypt(): 
    def __init__(self, master): 
     self.master = master 
     master.title("Encryption using RSA Algorithms") 

    x = input("Do you want to Encrypt or Decrypt?") 
    if x=="Encrypt": 
     print("Redirecting...") 
    else: 
     print("Redirecting...") 

    choice_1 = "Encrypt" 
    choice_2 = "Decrypt" 

    if x==choice_1: 
     y = input("Do you have a public key?") 
     if y=="Yes": 
      print("Redirecting...") 
     else: 
      print("Generating a key...") 
      print(self.publickey_generate()) #Error here that self is not defined 

    else: 
     z = input("What is your private key?") 

    def publickey_generate(self): 
     for output in range (0,1000): 
      public = random.randint(0, 1000) 
      if public <= 500: 
       public += public 
      else: 
       public = public - 1 

C'est le code que je fais, c'est un logiciel de cryptage et de décryptage. L'erreur (marqué par un commentaire) est

line 23, in Encrypt 
print(self.publickey_generate(). NameError: name 'self' is not defined 

Je ne sais pas pourquoi cela se passe. Toutes les entrées sont appréciées.

+0

changement 'Encrypt (classe)' à 'classe Encrypt (objet): '? – mguijarr

+7

Votre indentation doit être corrigée – Wondercricket

+0

Il semble que le code ne soit pas indenté correctement sous la méthode '' __init__'' – jakevdp

Répondre

1

Retraits devrait ressembler à:

import random 

class Encrypt(): 
    def __init__(self, master): 
     self.master = master 
     master.title("Encryption using RSA Algorithms") 

     x = input("Do you want to Encrypt or Decrypt?") 
     if x=="Encrypt": 
      print("Redirecting...") 
     else: 
      print("Redirecting...") 

     choice_1 = "Encrypt" 
     choice_2 = "Decrypt" 

     if x==choice_1: 
      y = input("Do you have a public key?") 
     if y=="Yes": 
      print("Redirecting...") 
     else: 
      print("Generating a key...") 
      print(self.publickey_generate()) #Error here that self is not defined 

     else: 
      z = input("What is your private key?") 

    def publickey_generate(self): 
     for output in range (0,1000): 
      public = random.randint(0, 1000) 
      if public <= 500: 
       public += public 
      else: 
        public = public - 1 
1

self fait référence à l'instance de l'objet lorsque vous êtes dans une méthode de la classe.

Ici, à la ligne 23, vous l'utilisez directement dans votre classe (ce qui n'est pas une bonne façon de le faire selon moi). Mais honnêtement, cela semble vraiment bizarre pour la programmation d'objets ... Vous devriez mettre tout votre code dans les méthodes de classe et seulement la variable globale à l'extérieur (si nécessaire). Donc, dans votre cas, le plus simple serait de mettre tout votre code (sauf publickey_generate()) dans votre méthode init