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 façon de taper indice FuncA
serait:
def FuncA(arg: CustomClass):
Ou serait-ce:
def FuncA(Arg:Type[CustomClass]):
?
Le précédent est correct , si arg
accepte une instance de CustomClass
:
def FuncA(arg: CustomClass):
# ^ instance of CustomClass
Si vous voulez que la classe CustomClass
elle-même (ou un sous-type) , alors vous devriez écrire:
from typing import Type # you have to import Type
def FuncA(arg: Type[CustomClass]):
# ^ CustomClass (class object) itself
Comme cela est écrit dans la documentation sur Taper :
class typing.Type(Generic[CT_co])
Une variable annotée avec
C
peut accepter une valeur de typeC
. En revanche, une variable annotée avecType[C]
Peut accepter des valeurs qui sont des classes elles-mêmes - plus précisément, elle acceptera le Objet de classe deC
.
La documentation comprend un exemple avec la classe int
:
a = 3 # Has type 'int' b = int # Has type 'Type[int]' c = type(a) # Also has type 'Type[int]'