2016-07-10 10 views
-1

以下私は最初のプロジェクトとして簡単なKeygenを作成しようとしています。どこかで、自己が定義されていないというエラーが出ています。Python - クラス - 自己定義されていません

私はあなたのインデントが間違っているが、私はこれが唯一のコピー&ペーストの問題であると仮定し、それはおそらく

import random 

class KeyGenerator(): 
def __init__(self): 

    length = 0 
    counter = 0 
    key = [] 
    Letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] 



def KeyGen4(self): 
    while self.counter != self.length: 
     a = random.choice(self.Letters) 
     print a #test 
     r = (random.randint(0,1)) 
     print r #test 
     if r == True: 
      a = a.upper() 
     else: 
      pass 
     self.key.append(a) 
     self.counter += 1 

    s = ''  
    self.key = s.join(key) 
    print self.key 
    return self.key 

def start(self): 
    selection = raw_input('[K]eygen4, [C]ustom length Keygen or [N]umbers? >') 

    if selection == 'K' or 'k': 
     length = 4 
     keyGen4(self) 

    elif selection == 'N' or 'n': 
     KeyGenN(self) 

    elif selection == 'C' or 'c': 
     length = int(raw_input("Key Length: ")) 
    #KeyGen4(self) # Change later after creating method with more options 

start(self) 
+1

'start(self)'ではなく 'self.start()'となります。あなたは他のメドンについても同じエラーを出しました。 –

答えて

4
  1. 簡単なものだ推測しています。

    下部にstart(self)は意味がありませんので

  2. 実際selfはそこに定義されていません。あなたは、クラスのインスタンスを作成し、そのstartメソッドを呼び出す必要があります:

    KeyGenerator().start() 
    
    # or 
    
    key_gen = KeyGenerator() 
    key_gen.start() 
    
+0

ありがとうございます! – Number28

0

次の2つの問題を抱えて:あなたはあなたが必要

  • すべてのクラス、関数にインデントを欠場

    1. をその関数のいずれかを呼び出す前にクラスのオブジェクトを作成する

    Rクラスは、クラスの内部クラスの関数を呼び出すとき、あなたはself.FUNCNAMEを使用する必要があることに注意してください。この

    import random 
    
    class KeyGenerator(): 
        def __init__(self): 
    
         length = 0 
         counter = 0 
         key = [] 
         Letters = ['a','b','c','d','e'] 
    
        def KeyGen4(self): 
         while self.counter != self.length: 
          a = random.choice(self.Letters) 
          print a #test 
          r = (random.randint(0,1)) 
          print r #test 
          if r == True: 
           a = a.upper() 
          else: 
           pass 
          self.key.append(a) 
          self.counter += 1 
    
         s = ''  
         self.key = s.join(key) 
         print self.key 
         return self.key 
    
        def start(self): 
         selection = raw_input('[K]eygen4, [C]ustom length Keygen or [N]umbers? >') 
    
         if selection == 'K' or 'k': 
          length = 4 
         self.keyGen4() 
    
         elif selection == 'N' or 'n': 
          self.KeyGenN() 
    
         elif selection == 'C' or 'c': 
          length = int(raw_input("Key Length: ")) 
         #KeyGen4(self) # Change later after creating method with more options 
    
    #now make an instance of your class 
    my_key_gen = KeyGenerator() 
    my_key_gen.start() 
    

    のようになります。すべてのクラス関数は引数として "self"を取るべきです。それが唯一の引数であれば、単にself.func()と呼ぶだけです。彼らが議論を取るならば、あなたはまだ自己を嘲るでしょう。self.func(arg1, arg2)

  • +0

    私は長い応答を感謝します!私はクラスのインスタンスを作るのを忘れました...私はこれらのことを覚えることができるようにもう少し読む必要があります。ありがとうございました! – Number28

    関連する問題