2016-12-13 8 views
-1

私のプログラムにはメサを使用しています。モデルクラスを実行しようとしていますが、エージェントクラスからAttributeErrorを取得しました。Python - メサ:各オブジェクトのインスタンス変数を取得する方法

これは私のスクリプトです:

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() 

各エージェントの変数を取得する方法は?私はそれがモデルが適切に実行されることを確認するためにチェックする必要があります。

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:

今のところ、これは(インタラクティブセッションで)実行するための私のコードですが、それは、私はまた、このような何か試してみました

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' 

を返します。

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

しかし、それは単一のオブジェクトのためだけに働きます

+0

*ここで*はエラーを発生させますか?完全なトレースバックを表示します。 –

+0

@DanielRoseman完全なトレースバックの編集 – dya

+0

これは以前の質問とまったく同じです。そこに明確に答えられているように、あなたは 'schedule'リストを反復する必要があります。 –

答えて

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

正しく表示されません。パラメータとしてfamsizeとdistanceを渡すことはありません。

関連する問題