2017-09-07 5 views
0

特定のクラスのサブクラスを受け入れるために、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 

次のコードを入力:私はPyCharm IDEのヒントを得る

process_any_subclass_type_of_A(B) 

'タイプA期待を、代わりにタイプ[B]を得ました。'

ここでタイプヒントを変更して、Aのサブタイプを受け入れることはできますか?

これによると(https://www.python.org/dev/peps/pep-0484/#type-definition-syntax、 "タイプが特定の引数型のサブタイプである式もその引数で受け入れられます)"、私の解決策(cls: A)はうまくいくはずですか?

+0

このエラーはPythonでも発生していますか?さもなければ、PyCharmのバグかもしれません! – jpic

+0

私のために私はpythonコンソールで試してみました。 PyCharmでバグが発生する可能性があります。 – Nirmi

+0

はい、動作しています。タイプヒントは私が知る限りオプションです。それでも、私はメソッドのユーザに、そこでの使用を意図したクラスを明示的に知りたがっています。 – user1211030

答えて

2

cls: Aを実行すると、clsAというインスタンスになります。型またはそのサブタイプで機能させるには、typing.Typeを使用します。

The type of class objects から:

時々、あなたは 与えられたクラスから継承したクラスのオブジェクトについてお話したいと思います。これはType[C]のように書くことができ、Cはクラスです。 換言すれば、引数注釈が を宣言として 引数は、引数がCのインスタンスであることを宣言(またはCの サブクラスの)注釈するCを使用して、しかしType[C]を使用して、クラスの名前場合Cであります引数は、C(またはC自身)から派生したクラスオブジェクトです。

2

ソリュトンが見つかりました。使用:

from typing import Type 
def process_any_subclass_type_of_A(cls: Type[A]): 
    pass 

そして、上記のPEPに記載されているように、望ましい動作があります。

関連する問題