2014-04-24 4 views
0

작은 프로젝트에서 작업 중이며 사용중인 오류 또는 내가 잘못하고있는 작업으로 인한 오류인지 확실하지 않습니다.자체 매개 변수에 문제가 발생했습니다.

저는 WOP IDLE에서 실행되는 Python에서 OOP을 사용하고 있습니다. Windows 8 PC에서 실행되는 Python 셸의 최신 버전이 있습니다.

내 프로그램에는 사용자 입력을 받아서 입력을 사용하여 선반을 만드는 데 필요한 매개 변수를 만드는 메서드가 있습니다.

'def subject_creator(self): 
    subject_name = input("Enter the subject name:") 
    subject_file = subject_name + "file" 
    name = subject_name 
    return subject_name, subject_file, name' 

이상적 프로그램은 다음 세 가지 반환 문 새로운 선반을 여는 즉 subject_name, subject_file, 이름을 사용합니다.

'def __init__(self, subject_name, subject_file, name): 
    subject_name = shelve.open ("subject_file", "c") 
    self.name = name 
    print("The", self.name ,"note has been created")' 

while True: 
    print (""" 
    1.Create new note 
    2.Add new term 
    3.Look up term 
    4.Exit/Quit 
    """) 
    ans= input("What would you like to do?: ") 
    if ans=="1": 
      subject_creator() 
      note = Notebook(subject_name, subject_file, name) 
      subject_name.sync() 

그러나 나는이 프로그램을 실행하면 내 주 메뉴에서 내가 선택 위의 코드를 실행 1을 선택, 나는 수신 및 오류 상태가.

<module> 
builtins.TypeError: subject_creator() missing 1 required positional argument: 'self' 

위와 같이 주제 작성자 용 코드를 작성할 때 self 매개 변수가 포함되어 있기 때문에 다소 의문입니다. 이 외에도 다른 오류가 없습니다.

모든 의견을 크게 환영합니다.

+1

'subject_creator'와'__init__' 함수 정의를 따옴표로 묶을 이유가 있습니까? –

+0

'subject_creator' 함수에'self' 매개 변수가 필요 없습니다. –

답변

0

이 라인은 당신은 변경해야

subject_creator() 

하여 오류가 발생

def subject_creator(self): 
    subject_name = input("Enter the subject name:") 
    subject_file = subject_name + "file" 
    name = subject_name 
    return subject_name, subject_file, name 

def subject_creator(): 
    subject_name = raw_input("Enter the subject name:") 
    subject_file = subject_name + "file" 
    name = subject_name 
    return subject_name, subject_file, name 

사용하지 않을 경우 당신은 함수의 매개 변수가 필요하지 않습니다 그것.

또한 파이썬 2.x를 사용하는 경우 input()이 아닌 raw_input() 사용을 고려하십시오. 자세한 내용은 differences between input() and raw_input()을 참조하십시오.

+0

고쳐 주셔서 감사합니다. – user3353958

1

"기능"과 "방법"이 혼란 스럽습니다.

파이썬에서

는 방법은 class 범위 내에서 정의 된 함수이며, 그것의 암시 첫 번째 인수로 객체를 받게됩니다

class Example: 
    def try_me(self): 
     print "hello." 

당신은 다음과 같이 사용합니다 :

x = Example() 
x.try_me() 

try_me()은 첫 번째 (여기서는 무시 된) 인수로 x을 수신합니다. 이것은 메서드가 객체 인스턴스의 속성 등에 액세스 할 수 있도록 유용합니다.

일반 함수, 즉하나 class (A)의 외부에서 정의 :

> if ans=="1": 
>  subject_creator() 
>  note = Notebook(subject_name, subject_file, name) 

: 단순히

try_me_too() 

접선처럼 호출

def try_me_too(): 
    print "hello." 

, 값을 선택하지 않는 예제 코드가 subject_creator 함수에 의해 반환 이 문제가 발생하는 범위에는 subject_name 등의 변수가 없습니다. 어떻게 든 생성해야합니다.

if ans=="1": 
    ick, bar, poo = subject_creator() 
    note = Notebook(ick, bar, poo) 

(나는 주로 이러한 subject_creator 내부 변수와 다른 정의 만 사용할 수 있음을 강조하는 말도 안되는 변수 이름을 선택했다.)


그냥이를 완료하는 데, 여기의 데모입니다 how self이 유용합니다. 이 같은

class Otherexample: 
    def __init__(self, greeting): 
     self.greeting = greeting 
    def try_me_also(self): 
     print self.greeting 

사용 : 여기

y = Otherexample("hello.") 
y.try_me_also() 

은 인사말 우리가 만든 객체의 속성입니다; __init__ 메서드는 인수로 인수를 받고 인스턴스의 특성으로 저장합니다. try_me_also 메서드는 self을 사용하여이 특성을 가져 와서 인쇄합니다.

+0

고마워요, 방금 클래스 내부에서 메서드를 만들 때마다 self를 사용해야한다고 생각했습니다. 그것에 대한 진정한 추론을 알지 못했습니다. – user3353958

관련 문제