2017-02-14 4 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によると、これを行う正しい方法は、引数にを使用することです。

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、私は実際に長い間よく聴いていましたが、私はすでに質問を書いていたまで答えを見つけませんでした。しかし、コミュニティがこれが悪い習慣であること、および/または役に立たないことに同意すれば、私はそれを再び喜んで削除するでしょう。 –

関連する問題