kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

PEP 483を読む(続き4)

総称型の定義と利用

特別なビルディングブロックであるGenericを使ってクラスを総称型として宣言できます。class MyGeneric(Generic[X, Y, ...]): ...で型変数X等に関する総称型MyGenericを定義します。

このGeneric[X, Y, ...]っていうのは継承とは関係なくて、型チェッカーが使うだけ、ってことでいいよね

総称型を継承するクラスは総称型になります。クラスは複数の総称型のサブクラスになれます。ただし、総称型から返される具体型から派生するクラスは総称型ではありません。

genericsを総称型と訳したけどgeneric typeと見分けがつかない
違う意味なんだろうか

あとspecific typeも具体型って書いたけどどうなんだ
特定の型、ってことじゃないよな
総称型の型変数に具体型を入れてできた具体型、だと思ってるんだけど
concrete typeじゃないのが気になるな
あ、でも型変数が複数あると具体型になっているとは限らないのか
特殊型、ってするとちょっとイメージが違うなあ
特殊化された型、とか?
どう呼ぶものだろう

総称型をサブクラス化すると、対応する具体型が部分型の関係になります。たとえば、class TodoList(Iterable[T], Container[T])であればTodoList[t1]はIterable[t1]の部分型となります。
総称型は何段開花に分けて特殊化することができます。すべての型変数は特殊型にも総称型にも置き換えることができます。

これはわかるんだけど

Genericが基底クラスリストに現れる場合、すべての型変数を含む必要があり、また、型パラメータの順番はGenericに現れる順番によって決まります。

ここが何を言っているのかよくわからない
itが何を指しているのか
何の順番が決まるのか
例を見てもピンとこない
例が何をしているかはわかってると思うんだけどでも上の文が何を言っているのか

総称型が型変数を省略して型アノテーションに現れる場合はAnyとみなされます。そのような式は動的型付けへのフォールバックとして利用することができ、issubclassやisinstanceで使うことがゆるされます。

ここのitは型変数のことだな
英語難しい

インスタンスの型情報はすべて実行時には消去されます

isinstanceであることとかissubclassであるってことくらいしか残ってないんだな