12

How can type hints be declared to indicate that a function returns an instance of the class reference that is passed as an argument?

Declaring it as follows does not seem right, as it indicates that the returned type is the same as the type of the argument:

from typing import TypeVar


T = TypeVar('T')

def my_factory(some_class: T) -> T:
    instance_of_some_class = some_class()
    return instance_of_some_class

Example usage:

class MyClass:
    pass

my_class = my_factory(MyClass)  # Inferred type should be MyClass
martineau
  • 119,623
  • 25
  • 170
  • 301
David Pärsson
  • 6,038
  • 2
  • 37
  • 52

1 Answers1

32

According to PEP-484, the right way to do this is to use Type[T] for the argument:

from typing import TypeVar, Type


T = TypeVar('T')

def my_factory(some_class: Type[T]) -> T:
    instance_of_some_class = some_class()
    return instance_of_some_class

It however seems like my editor does not (yet) support this.

David Pärsson
  • 6,038
  • 2
  • 37
  • 52