2012-03-13 2 views
1

버튼을 클릭하면 (wx 라이브러리와 python 2.7.2를 사용하여) printSaved이 호출되는 다음 파이썬 코드가 있습니다. 이러한 상황이 발생하지만 내가 정말 이상한 오류이상한 추가 인수

Traceback (most recent call last): 
    File "./program.py", line 135, in printSaved 
    s = self.readSaved() 
TypeError: readSaved() takes no arguments (1 given) 

있어 여기에 코드

def readSaved(): 
    f = codecs.open((os.getenv('HOME') +'/Dokument/savefile.txt') ,'r','utf-8') 
    l = f.readlines() 
    f.close() 
    return l 

    def printSaved(self,event): 
    s = self.readSaved() 
    for l in s: 
     print l 

내가 readSaved(somethingUseless)에 하나 개의 인수를 추가하여 문제를 해결하고 모든 것이 잘 작동합니다. 내 질문은 무엇이 readSaved 및 HOW/WHY로 전달되는 것입니까? 이것이 사건과 관련이 있습니까?

답변

3

는 파이썬에서, 메소드가 호출되는 객체는 항상 인수로 명시 적으로 전달됩니다. 이 인수는 일반적으로 self이라고합니다. 당신이 모듈 수준의 기능을하고 싶다면 다음과 같이

def readSaved(self): 
    # ... 

, 당신이 그것을 호출해야합니다 :

인스턴스 방법으로 readSaved()에 대한 올바른 정의는 첫 번째 줄이 있어야한다

s = readSaved() 
+0

답장을 보내 주셔서 감사합니다.이 질문에 감사드립니다. – nist

0

메서드로 - 어쨌든 메서드로 호출하는 것입니다 - 적어도 self을 인수로 가져야합니다. 함수가 메서드로 호출되면 메서드를 호출 한 개체가 해당 함수의 첫 번째 인수로 전달됩니다.

1

클래스 내에 정의되어 있습니까? 두 번째 방법은 self이므로 두 번째 방법을 사용한다고 가정합니다.

readSaved이 인스턴스 메서드 인 경우 첫 번째 매개 변수로도 self이 필요합니다. 필요하지 않은 경우

@staticmethod 
def readSaved(): 
    f = codecs.open((os.getenv('HOME') +'/Dokument/savefile.txt') ,'r','utf-8') 
    l = f.readlines() 
    f.close() 
    return l 
관련 문제