4 votes

Typage dynamique des sous-classes à l'aide des génériques en Python

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 ?

6voto

Aplet123 Points 1218

Vous pouvez fournir une borne :

T = TypeVar('T', bound=A)

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