2016-07-10 2 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

이다. 다른 메덤에 대해서도 같은 오류가 발생했습니다. –

답변

4
  1. 귀하의 들여 쓰기가 잘못 쉬운 일이지만, 나는이 만 복사 붙여 넣기 문제입니다 가정합니다.

    하단에 start(self)이 이해가되지 않는
  2. ,
    실제로 self은이 정의되어 있지 않습니다. 당신은이 문제가

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

대단히 감사합니다! – Number28

0

: 당신은 start 방법을 클래스의 인스턴스를 생성하고 호출해야

  1. 당신이 모든 클래스 기능에 들여 쓰기를 그리워 당신이해야
  2. 함수를 호출하기 전에 클래스의 객체를 만드십시오.

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()으로 전화하면됩니다. 그들이 논쟁을하면 여전히 자기 자신을 배제한다. 'start (self)'대신에`self.start()`가 self.func(arg1, arg2)

+0

오랜 반응에 감사드립니다! 나는 클래스의 인스턴스를 만드는 것을 잊었다. .. 나는 더 많이 읽을 필요가있다. 그래서 나는이 물건을 기억할 수있다. 고맙습니다! – Number28