2016-12-13 2 views
-1

J'utilise mesa pour mon programme. J'essaie d'exécuter ma classe de modèle, mais j'ai obtenu AttributeError de la classe d'agent.Python - mesa: Comment obtenir les variables d'instance de chaque objet

Ceci est mon script:

class ComtrModel (Model): 
    """ A model with some number of Agents""" 
    def __init__(self,N): 
     self.num_agents = N 
     self.schedule = RandomActivation(self) 
     for i in range (N): 
      a = CommuterAgent(i) 
      self.schedule.add(a) 

class CommuterAgent (Agent): 
    def __init__(self, model): 
     self.famsize = famsize 
     self.distance = distance 
     self.update_need = None 


    def step(self): 
     if self.distance >= 10000: 
      self.update_need = self.update_need() 
      return 

    def update_need (self, famsize): 
     if self.famsize : 
      self.famsize = famsize 
      return 
      prob_need() 

Comment obtenir les variables de chaque agent? Je dois le vérifier pour m'assurer que le modèle fonctionne correctement.

Jusqu'à présent, ceci est mon code à exécuter (sur session interactive):

from src.ComtrModel import * 
model = ComtrModel(5) 
for i in range (10): 
    model.step() 

for key, value in CommuterAgent.step(model): 
    print(key, value) 

EDIT: Mais il retourne

Traceback (most recent call last): 
    File "C:src/__init__.py", line 3, in <module> 
    from src.ComtrModel import * 
    File "C:\src\__init__.py", line 9, in <module> 
    for key, value in CommuterAgent.step(model): 
    File "C:\src\ComtrModel.py", line 40, in step 
    if self.distance >= 10000: 
AttributeError: 'ComtrModel' object has no attribute 'distance' 

J'ai aussi essayé quelque chose comme ceci:

>>> hi_obj = hi() 
>>> hi_obj.__dict__.keys() 

Mais il ne fonctionne que pour seul objet

+0

* Où * déclenche-t-il cette erreur? Afficher le retraçage complet –

+0

@DanielRoseman EDIT pour le retraçage complet – dya

+0

Mais c'est exactement la même chose que votre question précédente. Comme il a été clairement répondu ici, vous devez parcourir la liste 'schedule'. –

Répondre

0
def __init__(self, model): 
     self.famsize = famsize 
     self.distance = distance 
     self.update_need = None 

ne semble pas correct. Vous ne passez pas la famsize et la distance comme paramètres.