2016-04-12 35 views
0

Python kodum, çalıştırdığım sırada bu hatayı veriyor. Dairesel ithalat nedeniyle olabilir, ancak çözümü bulamıyorum. Ben dosyanın adını değiştirip init Simulador arasında yılında fila_module ithal denedim ama işe yaramadıBu hata nedir? "module" nesnesi "Fila" özelliğine sahip değil "

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 yoktur. 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 

cevap

0

dairesel bağımlılık. Eventos, 'u Eventos içeri aktaran simulador içeri aktarılıyor. Sen traceback Bu görebilirsiniz:

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 modülü yürütüldüğü gibi bir modüle isimleri ekler; file_moduleimport Eventos satırı çalıştığında, class Fila satırı henüz çalışmadı.

Ya burada bir döngüsel bağımlılığı yaratarak önlemek (ithal etmek eminEventos ihtiyaçları mısın simuladorsimumlador ithalat Eventos zaman) veya import Eventos altına -class Fila blok taşıyın.

İlgili konular