特定のクラスのサブクラスを受け入れるためにPython 3を使用してタイプヒントを許可したい。例えば:
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
次のコードを入力するとき:
process_any_subclass_type_of_A(B)
PyCharm IDEヒント 'タイプAが必要ですが、代わりにタイプ[B]を取得しました。]
Aのサブタイプを受け入れるために、ここでタイプヒンティングを変更するにはどうすればよいですか?
これによれば( https://www.python.org/dev/peps/pep-0484/#type-definition-syntax 、 "特定の引数型のサブタイプである式もその議論を受け入れました。」)、私の解決策(cls: A)
動作するはずです?
cls: A
を実行すると、cls
はA
型のインスタンスになります。タイプまたはそのサブタイプで動作させるには、 typing.Type
を使用します。
from typing import Type
def process_any_subclass_type_of_A(cls: Type[A]):
pass
から クラスオブジェクトのタイプ :
特定のクラスを継承するクラスオブジェクトについて話したい場合があります。これは
Type[C]
と綴ることができます。ここでC
はクラスです。つまり、C
がクラスの名前である場合、C
を使用して引数に注釈を付けると、引数がC
(またはC
のサブクラス)のインスタンスであると宣言されますが、引数注釈としてType[C]
を使用すると宣言されます引数はC
(またはC
自体)から派生したクラスオブジェクトです。
ソルトンを見つけました。使用する:
from typing import Type
def process_any_subclass_type_of_A(cls: Type[A]):
pass
そして、上記のPEPで述べたように、望ましい動作がそこにあります。