"TypeError: ___ object is not subscriptable" in Python and how can I fix it?

"TypeError: ___ object is not subscriptable" in Python and how can I fix it?

我的任务是使用队列和 class 构建代码,您可以在其中获得三个选项:

  1. 生成一个新号码
  2. 调用队列的第一个号码并将其从主队列中取出(为此有一个辅助队列)
  3. 显示已拨号码

这是 class 创建的:

class Fila:    
    def __init__(self):
        self._vet = []
    
    def enqueue(self, item): # enfileirar
        self._vet.append([-1])
    
    def dequeue(self): # desenfileirar
        self._vet.pop(0)

    def front(self): # mostrar o 1o da fila, sem remover!
        return(self._vet[1])
                
    def is_empty(self): # retorna se a fila esta vazia
        if len(self._vet) == 0:
            return True
        return False
        
    def __len__(self):
        return len(self._vet)

    def __str__(self): # representacao da fila como string
        return str(self._vet)

这是我想出的代码:

from classeFila import *

if __name__ == "__main__":
    f1 = Fila()
    fAux = Fila()
    contador = 0

    while True:
        opcao = int(input("Digite 1 para obter nova senha, 2 para chamar próxima senha ou 3 para mostrar senhas chamadas."))

        if opcao == 1:
            contador += 1
            f1.enqueue(contador)
            print("Sua senha é a de número", contador)
        elif opcao == 2:
            print("Senha número", f1[0], "está sendo chamada." )
            fAux.enqueue(f1[0])
            f1.dequeue()
        elif opcao == 3:
            print(fAux)
        else:
            print("Digite um número válido.")

问题是,在我 运行 代码和输入选项编号 2 的那一刻,我得到错误:

 Traceback (most recent call last):
 File "c:\Users\thoma\Desktop\Projetos Python\Fahad\Filas\senhas.py", line 16, in \<module\>
 print("Senha número", f1\[0\], "está sendo chamada." )
 TypeError: 'Fila' object is not subscriptable

虽然我知道这里的问题是尝试使用索引,但我在解决方案方面做得不够好,因为我无法指定正在调用的号码(f1[0] in "elif opcao == 2 ") 而不使用索引。有指导吗?

尝试取出上面提到的f1[0]中的索引,虽然程序可以运行,但终端会显示“Senha número [-1, -1] está sendo chamada”,或“正在呼叫号码 [-1, -1]”,如果您愿意的话。

添加 __getitem__ 函数,这将允许您在代码中使用 f1[0],这将从 0 的索引处获取 f1 内的元素内部 _vet 数组 read more here

class Fila:    
    def __init__(self):
        self._vet = []
    
    def enqueue(self, item): # enfileirar
        self._vet.append([-1])
    
    def dequeue(self): # desenfileirar
        self._vet.pop(0)

    def front(self): # mostrar o 1o da fila, sem remover!
        return(self._vet[1])
                
    def is_empty(self): # retorna se a fila esta vazia
        if len(self._vet) == 0:
            return True
        return False
        
    def __len__(self):
        return len(self._vet)

    def __str__(self): # representacao da fila como string
        return str(self._vet)

    def __getitem__(self, key): # this allows getting an element (overrided method)
        return self._vet[key]