2012-11-15 3 views
0

질문 헤더가 이상하게 들리지만 영어가 제 첫 번째 언어가 아니기 때문에 공식화하기가 매우 어렵습니다. 그러나, 나는 그것을 더 많은 텍스트로 설명 할 수있을 것이다.Python 3 : "self"를 사용할 필요가있는 __init__에서 자기 속성을 설정하는 명령을 내리셨습니까?

문제는 예를 들어 "Foo"라는 클래스를 만들려고한다는 것입니다.

# ../myProject/Foo.py 

class Foo: 
    '''Represents an example class for stackoverflow''' 
이제

푸 클래스의 모든 인스턴스

는 단순히 예를 통해 실행할 수있는 기능을 보유하고 function 속성을 가지고있다. 또한 parameters 속성, 터플 또는 목록이 있으며 function이 호출 될 때 사용해야하는 매개 변수가 들어 있습니다.

이 잘 동작하는 것
def __init__(self, function, parameters): 
     self.function = function 
     self.parameters = parameters 

    def callFunction(self): 
     if self.function: 
      self.function(*self.parameters) 

그러나, 문제는, 내가 인스턴스의 속성을 변경하려면, 그것을 기본 값을 제공 할 것이다. 기본적으로 다음 작업을 수행하려고합니다.

def __init__(self, function=setattr, \ 
     parameters=(self, "togglableAttribute", not self.togglableAttribute)): 

이렇게하면 NameError: name 'self' is not defined이 발생합니다. 작동을 위해이를 어떻게 구현해야합니까? 아니면 해결 방법을 제시해야합니까?

답변

1

self인스턴스을 설명하는 데 사용되는 일반적인 변수 이름입니다. 그러나 기본 인수는 함수를 만들 때 (클래스 생성시) 평가됩니다. 물론 self은 클래스가 아직 존재하지 않기 때문에 아직 존재하지 않습니다. - 클래스가 아직 빌드 중입니다.

일반적인 방법은 감시 카메라를 확인하는 것입니다.

def __init__(self, function=setattr, parameters=None): 
    if parameters is None: 
     parameters = (self, "togglableAttribute", not self.togglableAttribute) 

당신이 당신의 감시와 각각의 다양한 장점과 단점으로 사용할 수있는 다양한 개체에 대한 논의에 대한 내 대답 here (와 그 아래 코멘트)을 참조하십시오.

+0

Ahh 물론, 고맙습니다. 나는 존재하지 않는 것을 알고 있었지만, 다른 방식으로 그것을 구현하는 방법을 확실히 알지 못했습니다. 또한 이전 답변에 대한 링크를 제공해 주셔서 감사합니다. 소중한 사람이 언젠가는 도움이 될 수 있습니다. –