Le module typing
de Python définit un nombre de types de canard, par exemple, typing.SupportsAbs
pour représenter tout type qui implémente la méthode spéciale __abs__
.Annotation de type Python pour le type de canard personnalisé
Est-il possible de définir des types de canard personnalisés d'une manière telle que je puisse les utiliser comme des annotations de type valides?
Par exemple, je voudrais pouvoir annoter qu'un argument doit être un équivalent de type canard d'un threading.Lock
, à savoir, tout objet qui implémente acquire
et release
méthodes. Idéalement, je pourrais annoter un tel argument comme SupportsAcquireAndRequire
ou DuckLock
, plutôt que object
.
Avez-vous regardé comment ils sont définis? Vous pourriez faire quelque chose de similaire assez facilement. – jonrsharpe
En effet, 'SupportsAbs' ne contient que quelques lignes de code héritées du 'typing._Protocol' privé. Y at-il un moyen de faire cela qui n'implique pas d'utiliser une API privée? – shoyer