2014-08-28 3 views
0

주어진 코드에서 목록 x와 y는 임의의 확률 0.5로 0-N 사이에서 임의로 할당 된 숫자입니다. 저는 임의로 에이전트를 선택하고 func1을 사용하여 제거합니다. func2를 사용하여 하나의 에이전트를 추가하고 있습니다. 이제 두 개의 클래스 객체 x1과 x2를 정의했습니다. x2의 입력 인자 'state1'은 x1로부터 얻어지고, 마찬가지로 x1의 'state2'는 x2로부터 얻어진다.Python에서 클래스의 인수 전달

x1 및 x2에 'state2'및 'state1'인수를 전달하는 올바른 방법을 찾을 수 없습니다. 내 코드의 마지막 네 줄에서 알 수 있듯이 state1과 state2는 x1과 x2보다 먼저 정의해야하지만 클래스 개체 인 x1과 x2를 먼저 정의해야합니다.

나는 여기에서 다음을 시도하고있다 : 나는 두 개체군 N1과 N2를 가지고있다. 나는 N1에서 하나의 에이전트 (state1)를 무작위로 선택하여 N2에 추가합니다 (state = state1 유지). 동시에 N2에서 하나의 에이전트를 제거하고 (state2) N1 인구에 추가합니다 (상태 = state2 유지). 이 프로세스는 고정 된 시간 간격으로 반복됩니다.

누군가 내게 올바른 방법을 알려주고 코드를 실행할 수 있습니까?

import random 

class func(): 
    def __init__(self, N, state): 
     self.N = N 
     self.x = [] 
     self.y = [] 

     agents = range(self.N) 

     for i in range(self.N): 
      if random.random() < 0.5: 
       self.x.append(i) 
      else: 
       self.y.append(i) 

     agent = random.choice(agents) 

    def func1(self, agent): 
     if self.agent in self.x: 
      self.x.remove(agent) 
      return 1 
     elif self.agent in self.y: 
      self.y.remove(agent) 
      return 2 

    def func2(self, state): 
     if state == 1: 
      self.x.append(N) 
      return self.x 
     elif state == 2: 
      self.y.append(N) 
      return self.y 

if __name__=='__main__': 

    N1 = 100 
    N2 = 100 
    x1 = state(N1, state2) 
    x2 = state(N2, state1) 

    state1 = func.func1() 
    state2 = func.func1() 
+0

당신은 할 수 없습니다. 'x1'이'x2'에서 상태를 필요로한다면'x1'의 상태가 필요합니다. 어떻게 시작해야합니까? – jonrsharpe

+0

나는 네가 말하는 말이 정확하다는 것을 안다. 하지만 비슷한 문제가 붙어 있습니다. state1과 state2에 대해 초기 값을 지정하면 (= 1), 내 코드는 매번 동일한 state1과 state2 값을 가져 오지 않습니다. 내 접근 방식이 올바르지 않을 수도 있다는 것을 알고 있으므로 제안을 요청하는 것입니다. – ADK

+0

@iajay 들여 쓰기가 잘못되었다고 생각합니다. 여기 보이는 것처럼 많은 코드는 인스턴스 생성 시간이 아니라 클래스 생성 시간에'self'가 없을 때 실행됩니다. – glglgl

답변

1

당신은 상태 생성자에서 두 번째 인수를 제거 할 수 있습니다 및 set_state(state) 같은 별도의 방법으로, 나중에 전달합니다.

예컨대 : 새 기능 setState를에 상태 인수 및 관련 코드를 제거해야하는 상태 함수에서

x1 = state(N1) 
x2 = state(N2) 

state1 = func.func1() 
state2 = func.func2() 

setState(x1, state2) 
setState(x2, state1) 

. 나는 그 코드를 보지 못해 여기에 그것을 보여줄 수 없다.

+3

@Dijkgraaf 끔찍한 "왜 당신이 아니야"를 "해결책이 될 것"으로 바꾸면 답을 줄 수 있습니다. – glglgl

+0

@glglgl 그 대답에 동의하고 그것이 해결책이라고 생각한다면, 해결책으로 읽히도록 편집하고, 약간의 세부 사항을 추가 할 수도 있습니다 :-) 그것은 많은 세부 사항없이 제안처럼 읽습니다. – Dijkgraaf

+2

@Dijkgraaf 나는 Michel에 맡길 것 같아. 방금 편집하려고 시도했지만 문장 자체가 불완전합니다 ... – glglgl