3 votes

Types Python 3.6 : Utilisation d'une variable avant l'affectation

Le nouveau mode de fonctionnement des types/indications/attributions est cool, mais je ne sais pas comment faire fonctionner une chose aussi simple :

class MyContainer:
    def addMyItem(self, item:MyItem):
        pass

class MyItem:
    def __init__(self, container:MyContainer):
        pass

Une erreur s'est produite : Using variable 'MyItem' before assignment . La meilleure solution de contournement, mais super laide, que j'ai trouvée jusqu'à présent est la suivante :

class MyContainer:
    def addMyItem(self, untypeditem):
        item:MyItem=untypeditem
        pass

class MyItem:
    def __init__(self, container:MyContainer):
        pass

S'il te plaît, dis-moi que cette langue avec le principe n°1 Beautiful is better than ugly a quelque chose de mieux pour résoudre ce problème de frappe commun

6voto

AKX Points 14236

Les références vers l'avant sont juste des chaînes de caractères se référant au nom (tel qu'il est visible dans le module).

class MyContainer:
    def addMyItem(self, item: 'MyItem'):
        pass

class MyItem:
    def __init__(self, container: 'MyContainer'):
        pass

Si vous devez importer le nom à partir d'un autre endroit (et que vous n'avez besoin du nom que pour la vérification de type, ou si cela peut provoquer une importation circulaire), vous pouvez utiliser

import typing

if typing.TYPE_CHECKING:
    from foo import Thing

TYPE_CHECKING est vrai uniquement lorsqu'un vérificateur de type est en cours d'exécution (c'est-à-dire que votre code n'est pas évalué pour être exécuté).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X