2014-02-09 2 views
1

인스턴스 속성을 기본 매개 변수로 사용하려고합니다. 불행하게도, 파이썬은 변수 "자기"를 인식하지 않는 것왜 인스턴스 속성을 기본 매개 변수로 사용할 수 없습니까?

class Example(object): 

    def __init__(self, name): 
     self.bar = "" 

    def foo(self, param=self.bar): 
     print self.bar 

왜 메서드 서명에서 자기의 사용을 허용 파이썬하지 않는 이유는 무엇입니까? 또한, 자기의 사용없이 비슷한 결과를 얻을 수있는 원활한 방법에 대한 모든 팁?

+2

메서드가 만들어 질 때 인스턴스가 존재하지 않으므로 해당 특성이 존재하지 않습니다. – bereal

답변

2

두 가지 이유를. 첫째, self는 매개 변수이기도하므로 함수 본문 자체가 아니라 메서드 본문 내에 존재하기 때문입니다.

둘째, 더 중요한 것은 함수 기본값은 호출 될 때가 아니라 정의 된 시점에 평가됩니다. 이것은 아직 작성되지 않은 인스턴스를 나타냅니다.

답은 기본값을 None으로 정의하고 해당 값을 확인하십시오.

2

self은 함수에 대한 매개 변수입니다. 따라서 기능을 입력하기 전에 self.something을 입력 할 수 없습니다. 기능을 입력하기 전에 self이라는 정의가 없기 때문입니다.

는 다음을 수행 할 수 있습니다 :

class Example(object): 
    def __init__(self, name): 
     self.bar = name 

    def foo(self, param=None): 
     if param is None: 
      param = self.bar 
     # do stuff with param, which now defaults to self.bar 
관련 문제