2016-04-12 5 views
0

Pythonコードが実行中にこのエラーが発生しています。それは循環輸入のためかもしれませんが、私は解決策を見つけることができません。私は、ファイルの名前を変更し、のinit simuladorのにfila_moduleをインポートしようとしましたが、それはうまくいきませんでしたこのエラーは何ですか? "module"オブジェクトには 'Fila'という属性はありません "

Traceback (most recent call last): 
File "/Users/miff/Desktop/SCC/simulador.py", line 9, in <module> 
    import fila_module 
File "/Users/miff/Desktop/SCC/fila_module.py", line 9, in <module> 
    import Eventos 
File "/Users/miff/Desktop/SCC/Eventos.py", line 12, in <module> 
    import simulador 
File "/Users/miff/Desktop/SCC/simulador.py", line 68, in <module> 
    s = Simulador(480) 
    File "/Users/miff/Desktop/SCC/simulador.py", line 32, in __init__ 
    self.client_queue = fila_module.Fila(self,2) 
AttributeError: 'module' object has no attribute 'Fila' 

simulador.py

import fila_module 
import lista 
import Eventos 


class Simulador: 

    def insereEvento(self,event): 
     self.event_list.insert_event(event) 

    #Construtor 
    def __init__(self, tempo_simulacao): 
     self.tempo_simulacao = tempo_simulacao 
     #Médias das distribuições de chegadas e de atendimento no serviço 
     self.media_cheg = 1 
     self.media_serv = 1.5 
     #Número de clientes que vão ser atendidos 
     self.n_clientes = 100 

     #Relógio de simulação - variável que contém o valor do tempo em cada instante 
     self.instant = 0  #valor inicial a zero  

     #Serviço - pode haver mais do que um num simulador 
     self.client_queue = fila_module.Fila(self,2) 
     self.loja_queue = fila_module.Fila(self,1) 
     #Lista de eventos - onde ficam registados todos os eventos que vão ocorrer na simulação 
     #Cada simulador só tem uma 
     self.event_list = lista.Lista(self) 

     #Agendamento da primeira chegada 
     #Se não for feito, o simulador não tem eventos para simular 
     self.insereEvento(Eventos.Chegada(self.instant, self)) 

#Cria um simulador e 
s = Simulador(480) 
#põe-o em marcha 
s.executa() 

fila_moduleがあります。 py

import Eventos 

class Fila: 
    """Classe que representa um serviço com uma fila de espera associada""" 


    # Construtor 
    def __init__(self, sim, n_atendedores): 
     self.fila=[]    #Fila de espera do serviço 
     self.simulator = sim   #Referência para o simulador a que pertence o serviço 
     self.estado = 0    #Variável que regista o estado do serviço: 0 - livre; 1 - ocupado 
     self.temp_last = sim.instant  #Tempo que passou desde o último evento. Neste caso 0, porque a simulação ainda não começou. 
     self.atendidos = 0   #Número de clientes atendidos até ao momento 
     self.soma_temp_esp = 0 
     self.soma_temp_serv = 0 
     self.n_atendedores = n_atendedores 
     self.atendidos_no_momento = 0 

    def insereClient(self,client): 
     """Método que insere cliente (client) no serviço""" 
     if(self.estado < n_atendedores): #Se serviço livre, 
      self.atendidos_no_momento += 1 
      if self.atendidos_no_momento == n_atendedores: 
       self.estado = 1 #fica ocupado e 
      #agenda saída do cliente c para daqui a self.simulator.media_serv instantes 
      self.simulator.insereEvento(Eventos.Saida(self.simulator.instant + self.simulator.media_serv,self.simulator)) 
     else: 
      self.fila.append(client) #Se serviço ocupado, o cliente vai para a fila de espera 


    def removeClient(self): 
     """Método que remove cliente do serviço""" 
     self.atendidos = self.atendidos+1 #Regista que acabou de atender + 1 cliente 
     if(self.fila==[]): #Se a fila está vazia, 
      self.estado = 0 # liberta o serviço 
      self.atendidos_no_momento -= 1 
      return None 
     else: #Se não, 
      #vai buscar próximo cliente à fila de espera e 
      cliente = self.fila.pop(0) 
      #agenda a sua saida para daqui a self.simulator.media_serv instantes 
      self.simulator.insereEvento(Eventos.Saida(self.simulator.instant + self.simulator.media_serv,self.simulator)) 
      return cliente 

答えて

0

あなたは循環依存性Eventosはをインポートしています。fila_moduleをインポートすると、Eventosがインポートされます。これはトレースバックで見ることができます:

File "/Users/miff/Desktop/SCC/simulador.py", line 9, in <module> 
    import fila_module 
File "/Users/miff/Desktop/SCC/fila_module.py", line 9, in <module> 
    import Eventos 
File "/Users/miff/Desktop/SCC/Eventos.py", line 12, in <module> 
    import simulador 
File "/Users/miff/Desktop/SCC/simulador.py", line 68, in <module> 

モジュールが実行されると、Pythonはモジュールに名前を追加します。 import Eventos行がfile_moduleで実行されている場合、​​行はまだ実行されていません。

ここでも循環依存関係を作成しないように(あなたはEventossimuladorときsimumlador輸入Eventosをインポートする必要が確信している)、または以下​​ブロックにimport Eventosを移動します。

関連する問題