2017-07-02 1 views
0

私はMyConstrainingClassからのものか、継承クラスに一般的な辞書マッピングテキストキーを実装したいので、次のように私はTypeVarMyDictクラスを宣言:これらの派手なTypeVarのPyCharmは何を生成していますか?

from typing import Mapping, TypeVar 

T = TypeVar("T", MyConstrainingClass) 


class MyDict(Mapping[str, T]): 

私は抽象基底クラスのメソッドを実装するためのPyCharmの提案を受け入れると、それは次のような出力を生成します。

class MyList(Mapping[str, T]): 
    def __getitem__(self, k: _KT) -> _VT_co: 
     pass 

    def __iter__(self) -> Iterator[_T_co]: 
     pass 

    def __len__(self) -> int: 
     pass 

たもの_KT_VT_co_T_coジェネリック型VARSは何ですか?私はどこにでも自分を定義していないので、スーパークラスから取ったようです。

"KeyType"、 "ValueType covariant"、 "Type(?)共変"とはっきりしていますが、このような一般的なパラメータを作成しなければならない場合や、

答えて

1

PyCharmはMapping declaration in the typing module(またはファイルの独自の内部バージョン)からそれらを取っている:

class Mapping(Collection[KT], Generic[KT, VT_co], 
       extra=collections_abc.Mapping): 
    __slots__ =() 

Iterableから、基底クラスまで、さらにから継承T_co共変で)。

私はあなたのより具体的なバージョンでこれらの提案を交換したい:私には多くの意味があります

class MyList(Mapping[str, T]): 
    def __getitem__(self, k: str) -> T: 
     pass 

    def __iter__(self) -> Iterator[str]: 
     pass 

    def __len__(self) -> int: 
     pass 
+0

おかげで、。 'typing'モジュールが定義するものを満たすために、いくつかの共変な' TypeVar'を作成しなければならないのではないかと心配していました。 –

関連する問題