2014-08-28 2 views
0

В данном коде списки x и y являются случайными номерами между 0-N с некоторой вероятностью 0,5. Я случайно выбираю агента и удаляю его с помощью func1. Я добавляю один агент, используя func2. Теперь я определил два объекта класса x1 и x2. Входной аргумент 'state1' из x2 получается из x1, и аналогично 'state2' из x1 получается из x2.Передача аргументов в классе в Python

Я не могу найти правильный способ передачи аргументов «state2» и «state1» в x1 и x2. Как вы можете видеть из последних четырех строк моего кода, state1 и state2 должны быть определены до x1 и x2, но я не могу этого сделать, поскольку объекты класса x1 и x2 должны быть определены сначала так же, как и я.

То, что я пытаюсь достичь здесь, следующее: у меня две популяции N1 и N2. Я произвольно выбираю один агент (скажем, состояние 1) из N1 и добавляю его (сохраняя его состояние = состояние1) до N2. В то же время я удаляю один агент из N2 (скажем, состояние2) и добавляя его (сохраняя его состояние = состояние2) к N1-популяции. Этот процесс повторяется с течением времени с фиксированным интервалом времени.

Может ли кто-нибудь сказать мне правильный способ сделать это и сделать код запущенным?

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

Я знаю, что вы говорите правильно. Но у меня такая же проблема. Если я назначу некоторые начальные значения для состояния1 и state2 say (= 1), мой код не будет принимать одинаковые значения для состояний1 и состояния2 каждый раз. Я знаю, что мой подход может быть неправильным, поэтому я прошу предложения. – ADK

+0

@iajay Я думаю, что вы вдавливаете также неправильно. Как это выглядит здесь, большая часть кода работает не во время создания экземпляра, а во время создания класса, когда еще нет 'self'. – glglgl

ответ

1

Вы можете удалить второй аргумент из государственного конструктора и передать его позже, в отдельном методе, как set_state(state).

т.д .:

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

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

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

В государственной функции вы должны лишить государственный аргумент и связанный код новой функции SetState. Я не вижу этого кода, поэтому я не могу показать это здесь.

+3

@Dijkgraaf Это дает ответ, если вы замените страшное «Почему бы вам не быть» с «Решение должно быть». – glglgl

+0

@glglgl Если вы согласны с этим ответом и думаете, что это решение, отредактируйте его так, чтобы он читал как решение и, возможно, даже добавил некоторые детали :-) Так как он читается, как предложение без большого количества подробностей. – Dijkgraaf

+2

@ Dijkgraaf Я думаю, что оставлю это Мишелю. Я просто попытался его отредактировать, но предложение само по себе неполно ... – glglgl

Смежные вопросы