2011-09-10 8 views
24
def save_file(self, outputfilename = self.image_filename): 
    self.file.read(outputfilename) 
    .... 

은 첫 번째 줄에 NameError: name 'self' is not defined이됩니다. 파이썬은 그것을 받아들이지 않는다. 예외를 발생시키지 않도록 코드를 다시 작성하려면 어떻게해야합니까?메서드의 기본값으로 self. * 사용

+0

함수 정의가 다른 범위에서 다른 시간에 발생합니다. –

+0

작동하면 좋습니다. 코드를 훨씬 깔끔하게 만듭니다. 구현할 Pandoran Box를 열 것 같습니까? –

답변

25

기본값을 사용하여 None을 감지합니다.

def save_file(self, outputfilename=None): 
    if outputfilename is None: 
     outputfilename = self.image_filename 
    self.file.read(outputfilename) 
    .... 
+2

오도 된이 패턴의 문제점. – Nikolai

3
def save_file(self, outputfilename = None): 
    if not outputfilename: 
     outputfilename = self.image_filename 
    self.file.read(outputfilename) 
    .... 
11

documentation 상태 : 함수 정의 실행시

기본 파라미터 값이 평가된다.

이것은 인스턴스를 참조 할 수없는 이유를 설명합니다. 다른 사람들이 말한 것처럼 None을 기본값으로 사용하고 인스턴스가 사용 가능할 때 함수 실행 시간에 값을 수정합니다.

2
def save_file(self, outputfilename=None): 
    outputfilename = outputfilename or self.image_filename 
    self.file.read(outputfilename) 

또는

def save_file(self, outputfilename=None):   
    self.file.read(outputfilename or self.image_filename) 

이것은 하나 개의 변수에 아무것도하지만, 당신이있는 경우에,의는 5 말을 할 수 있습니다, 이것은 내 의견으로는, 읽기 쉽게 코드를 만든다.

관련 문제