2017-02-14 3 views
0

Как можно объявить подсказки, чтобы указать, что функция возвращает экземпляр ссылки на класс, которая передается в качестве аргумента?Как создать тип намека на общий метод фабрики?

Декларирование его следующим образом не кажется правильным, поскольку это указывает на то, что возвращаемый тип является таким же, как тип аргумента:

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 

Пример использования:

class MyClass: 
    pass 

my_class = my_factory(MyClass) # Inferred type should be MyClass 

ответ

2

Согласно PEP-484 , правильным способом для этого является использование Type[T] для аргумента:

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 

Кажется, что мой редактор пока не поддерживает это.

+0

Таким образом, ваш собственный ответ заключается в том, чтобы просто сделать то, что говорит документация ... – martineau

+0

@martineau, я на самом деле долгое время искал Google и не нашел ответа до тех пор, пока я уже не написал вопрос. Но если сообщество соглашается с тем, что это плохая практика и/или не полезно, я с удовольствием удалю ее снова. –

Смежные вопросы