我的python代码在我运行时会给出这个错误。这可能是循环进口造成的,但我找不到解决办法。我尝试过更改文件名,并在模拟程序的fila_module init中导入,但没有工作。
的确有
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 发布于 2016-04-12 16:43:06
你有一个循环依赖关系。Eventos正在导入simulador,后者导入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在模块执行时向模块添加名称;当file_module中的class Fila行运行时,class Fila行尚未运行。
要么在这里避免创建循环依赖项(您确定Eventos需要在simumlador导入Eventos时导入Eventos),要么将import Eventos移到class Fila块下面。
https://stackoverflow.com/questions/36579134
复制相似问题