2012-07-24 2 views
0

그래서 Pybrain API를 사용하여 네트워크를 만드는 클래스를 만드는 과정에 있습니다. Pybrain의 API에 내 발을 들여 놓기위한 약간의 프로세스 만 제공됩니다.클래스의 변수 범위에 문제가 있습니까?

제 문제는 클래스에서 범위가 작동하는 방식에 다소 익숙합니다. 기본적으로 프로그램을 올바르게 설정했지만 키 오류가 계속 발생합니다.

조치가 필요한 모든 변수는 함수에서 작성됩니다. 클래스에 대해 작업하고있는 메서드는 파이썬에서 vars() [] 메서드를 사용하여 init 함수에 선언 된 변수 중 하나를 호출하려고합니다. Matching Binary operators in Tuples to Dictionary Items

어쨌든, 방법은 다음과 같습니다 :

def constructnetwork(self): 
    """constructs network using gathered data in __init__""" 
     if self.recurrent: 
      self.network = pybrain.RecurrentNetwork 
      #add modules/connections here 
     elif self.forward: 
      self.network = pybrain.FeedForwardNetwork 
     else: 
      self.network = pybrain.network 

     print vars()[self.CONNECT+str(1)] 
     print vars()[self.CONNECT+str(2)] 
     print self.network 

(나쁜 간격을 용서가 복사 이상 붙여 넣기하지 않았다 (실제로 여기에 코드의 ... 초안의 일부를 볼 수 있습니다 KeyError를 높이는 부분은 변수 "Connection1"(self.CONNECT = 'Connection')의 값을 얻어야하는 print vars() [self.CONNECT + str (1)]이지만 호출 키 오류.

어떻게 변수를 전송할 수 있습니까? 물어 보는 데 도움이되는 정보가 더 필요하면 quesiton을 짧게 유지하려고합니다. 가능한 한.

답변

2

vars()로컬의 사전에 대한 참조를 반환합니다. __init__vars()을 사용했다면 (제안한 링크의 코드로) 해당 메소드 외부의 어느 곳에서도 액세스 할 수없는 로컬 변수를 방금 생성했습니다.

vars()은 무엇을하고 있으며 무엇을하려는 것입니까? 나는 당신이 원하는 것이 바로 getattrsetattr이거나 그냥 사전이 아니라 vars이 아니라는 직감을 가지고 있습니다.

편집 : 귀하의 의견에 따라 실제로는 vars을 사용하지 않아야합니다. 하지만,

self.connections[1] 

이것은 당신의 코드를 기반으로 단지 막연한 추측은 다음과 같습니다

당신의 방법에 다음
self.connections = {} 
self.connections[1] = "This is connection 1" 

가 수행 : 당신은 같은 일을하고, __init__에, 더 나을 것이다. 나는이 "연결"에 대해 당신이 의도하고있는 것을 정말로 말할 수 없습니다. 개체와 관련된 일부 데이터가되기를 원합니 까?

+0

변수를 정의하고 조정할 수 있다고 생각했습니다. 요점은 vars에 몇 가지 루프와 var + = 1을 사용하여 입력에 따라 새 변수를 만드는 것이 었습니다. 즉, vars() [CONNECT + str (countingvariable)] Connectionx를 만들 것입니다. 여기서 x는 1 씩 증가하는 계수 변수의 값입니까? –

+0

그리고 새로 생성 된 모듈/연결을 기반으로 네트워크를 구성 할 클래스에서 새로 정의 된 변수를 호출합니다. __init__에 할당되었습니다. –

+0

그냥 지연 되었습니까? 나는 ~ 3 시간을이 __init__ 함수를 설정하는 데 보냈으며 거대한 것입니다 ... –