2016-12-12 17 views
-1

Отредактировано:Python- как получить список самопеременных в классе состоит из N-self

Я хочу сгенерировать N-количество агентов. У каждого агента будет имя, поэтому я создаю случайное имя из имен и назначу его агенту класса.

После запуска модели я хочу получить список имен моих агентов.

Это из Меса:

import names 
from mesa import Agent, Model 
from mesa.time import RandomActivation 

class Agent(Agent): 
    def __init__(self, name): 
     self.name= names.get_full_name() 
     self.wealth = 1 

    def step(self): 
     pass 

class Model(Model): 
    def __init__(self, N): 
     self.num_agents = N 
     self.schedule = RandomActivation(self) 

     for i in range(N): 
      a = MoneyAgent(i) 
      self.schedule.add(a) 

    def step(self): 
     self.schedule.step() 

на интерактивной сессии

gow = MoneyModel(10) 
gow.step() 
atr = list([a for a in MoneyAgent.name]) 
print(atr) 

Я получил эту ошибку:

Файл "C:. \ Src__init __ ру", строка 7, в atr = list ([a для a в MoneyAgent.name]) AttributeError: тип объекта 'MoneyAgent' не имеет атрибута 'name'

Как это исправить?

+0

ваша первая строка в '__init__' метод имеет синтаксическую ошибку. Вы вызываете 'names.get_full_name()'. Однако переменная, которую вы передаете методу, является _name_, а не _names_ – Jalo

+0

Когда я использую _names_, я получу эту ошибку: объект _'int 'не имеет атрибута' get_full_name'_ – dya

+1

, он импортирует 'names' выше. –

ответ

3

Вот моя интерпретация вашей проблемы: Вы создаете MoneyModel объект, содержащий коллекцию MoneyAgent объектов, хранящихся в коллекции, как объекта, указанного в MoneyModel.schedule, и вы хотите list из name с каждого MoneyAgent объекта в вашей коллекции MoneyModel.schedule.

Предполагая, что MoneyModel.schedule ведет себя в качестве итератора объекта, следующее должно работать:

atr = [agent.name for agent in gow.schedule]