首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个错误是什么?“模块‘对象没有属性'Fila'”

这个错误是什么?“模块‘对象没有属性'Fila'”
EN

Stack Overflow用户
提问于 2016-04-12 16:32:04
回答 1查看 101关注 0票数 0

我的python代码在我运行时会给出这个错误。这可能是循环进口造成的,但我找不到解决办法。我尝试过更改文件名,并在模拟程序的fila_module init中导入,但没有工作。

的确有

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 16:43:06

你有一个循环依赖关系。Eventos正在导入simulador,后者导入fila_module,后者导入Eventos。你可以在回溯中看到这一点:

代码语言:javascript
复制
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块下面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36579134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档