Disons que je dois suivre les cours suivants.
class A:
@staticmethod
def foo():
pass
class B(A):
pass
Et j'ai une sorte de fonction qui construit un objet en fonction de son type et qui appelle une fonction.
def create(cls: Type[A]) -> A:
cls.foo()
return cls()
Je peux maintenant faire les appels suivants à cette fonction. Et parce que B
hérite de A
c'est tout bon.
instance_a: A = create(A)
instance_b: B = create(B)
Sauf qu'avec cette dernière, la vérification de type commencera à se plaindre parce que create
selon les annotations, renvoie une instance de A
.
Cela pourrait être résolu avec TypeVar
comme suit.
from typing import Type, TypeVar
T = TypeVar('T')
def create(cls: Type[T]) -> T:
cls.foo()
return cls()
Sauf que maintenant la vérification de la typographie ne fait pas son travail original de garantir que cls
a une méthode appelée foo
. Existe-t-il un moyen de spécifier qu'un générique doit être d'un certain type ?