196 votes

Indications de type avec des classes définies par l'utilisateur

Impossible de trouver une réponse définitive. Je veux faire un conseil de type pour une fonction et le type étant une classe personnalisée que j'ai définie, appelée CustomClass() .

Et puis, disons, dans une fonction, appelez-la FuncA(arg) , j'ai un argument nommé arg . Est-ce que la bonne manière de taper l'indice FuncA serait:

def FuncA(arg: CustomClass):

Ou serait-ce:

def FuncA(Arg:Type[CustomClass]): ?

243voto

CommuSoft Points 6439

Le premier est correct, si arg accepte une instance de CustomClass:

def FuncA(arg: CustomClass):
    #     ^ instance of CustomClass

Dans le cas où vous voulez que la classe CustomClass lui-même (ou un sous-type), ensuite, vous devez écrire:

from typing import Type  # you have to import Type

def FuncA(arg: Type[CustomClass]):
    #     ^ CustomClass (class object) itself

Comme il est écrit dans la documentation de Taper:

class typing.Type(Generic[CT_co])

Une variable annotées C peut accepter une valeur de type C. Dans revanche, une variable annotées Type[C] peut accepter des valeurs qui sont classes elles-mêmes - en particulier, il accepte la classe l'objet de la C.

La documentation comprend un exemple avec l' int classe:

a = 3         # Has type 'int'
b = int       # Has type 'Type[int]'
c = type(a)   # Also has type 'Type[int]'

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