Je veux taper les entrées d'une méthode de classe en Python 3. Je veux que l'argument soit une list d'une classe personnalisée que j'ai créée. La définition de la méthode est la suivante:
def add_report_data(self, report_data: list[ReportData]): TypeError: 'type' object is not subscriptable
ReportData est une classe régulière définie comme suit:
class ReportData:
def __init__(self, system: str, value: int):
self.__system = system
self.__value = value
Lors de l'exécution de mon code, je reçois l'erreur suivante:
def add_report_data(self, report_data: list[ReportData]):
pass
Cependant, changer le type de report_data en simplement list est capable de s'exécuter, mais ce n'est pas exactement ce que je veux faire. Une idée de ce qui se passe? Merci.
3 Réponses :
Vous souhaitez importer la saisie.List and do List[ReportData]
List[ReportData] fait référence à la version générique de la list utilisée pour la saisie au lieu de list[ReportData] , qui fait référence à la liste des types de données
#Importing List from typing
from typing import List
class ReportData:
def __init__(self, system: str, value: int):
self.__system = system
self.__value = value
class A:
#Using List[ReportData]
def add_report_data(self, report_data: List[ReportData]):
pass
Comme Devesh l'a répondu, votre problème est qu'en fait, vous ne tapez pas le paramètre report_data avec une list de type ReportData plutôt que vous essayez d'obtenir l'élément de la list à l'index ReportData , et cela vous donne l'erreur car ReportData n'est pas un index valide.
Lorsque vous essayez de taper comme une list de type MyClass vous devez utiliser la typing.List et transmettre que l'élément types.
Sur Python 3.9+ et Python 3.7+ si vous faites cela
from __future__ import annotations
vous pouvez utiliser list comme annotation de type. Votre code doit fonctionner tel que vous l'avez écrit.
add_report_datafait partie de la classeReportData?Comme le premier commentaire l'indique, votre question n'est pas claire car vous n'affichez pas un seul extrait de code exécutable qui montre votre erreur. Veuillez lire et suivre Comment créer un exemple minimal, complet et vérifiable .