Couldn’t seem to find a definitive answer. I want to do a type hint for a function and the type being some custom class that I have defined, called it CustomClass().
And then let’s say in some function, call it FuncA(arg), I have one argument named arg. Would the correct way to type hint FuncA be:
def FuncA(arg: CustomClass):
Or would it be:
from typing import Type def FuncA(Arg:Type[CustomClass]):
Advertisement
Answer
The former is correct, if arg accepts an instance of CustomClass:
def FuncA(arg: CustomClass):
# ^ instance of CustomClass
In case you want the class CustomClass itself (or a subtype), then you should write:
from typing import Type # you have to import Type
def FuncA(arg: Type[CustomClass]):
# ^ CustomClass (class object) itself
Like it is written in the documentation about Typing:
class typing.Type(Generic[CT_co])A variable annotated with
Cmay accept a value of typeC. In contrast, a variable annotated withType[C]may accept values that are classes themselves – specifically, it will accept the class object ofC.
The documentation includes an example with the int class:
a = 3 # Has type 'int' b = int # Has type 'Type[int]' c = type(a) # Also has type 'Type[int]'