["python","subclass","python-typing"]
Subclass in type hinting

I want to allow type hinting using Python 3 to accept sub classes of a certain class. E.g.: class A: pass class B(A): pass class C(A): pass def process_any_subclass_type_of_A(cls: A): if cls == B: # do something elif cls == C: # do something else Now when typing the following code: process_any_subclass_type_of_A(B) I get an PyCharm IDE hint Expected type A, got Type[B] instead. How can I change type hinting here to accept any subtypes of A? According to PEP 484 ("Expressions whose type is a subtype of a specific argument type are also accepted for that argument."), I understand that my solution (cls: A) should work?
When you specify cls: A, you're saying that cls expects an instance of type A. For python 3.5.2 through 3.8, the type hint to specify cls as a class object for the type A (or its subtypes) uses typing.Type. from typing import Type def process_any_subclass_type_of_A(cls: Type[A]): pass From The type of class objects: Sometimes you want to talk about class objects that inherit from a given class. This can be spelled as Type[C] where C is a class. In other words, when C is the name of a class, using C to annotate an argument declares that the argument is an instance of C (or of a subclass of C), but using Type[C] as an argument annotation declares that the argument is a class object deriving from C (or C itself). From python 3.9 onwards, it is recommended to use the builtin type instead. def process_any_subclass_type_of_A(cls: type[A]): pass