種別[gsm] 2021-02-07T23:22:23Z
セクショングローバル共有メモ
日時2021-02-07T23:22:23Z
元URL(URLなし)

Python の型システム… typing…

jrf> Python の型システム… typing 関連は、まだ私には使えなさそうだな。

Haskell とか SML とか使ったことがあるから、型システム自体はわかるんだが、それと Python との組み合わせがどうも気持ち悪い。また、今 Python のバージョン 3.7 系を使っているのだけど、3.9 系あたりになるとかなり違って、発展途上で、日本語サイトとかがあまり役に立たない感じだし…。

↓の Frozen を使い出してるけど、

《How to freeze Python classes « Python recipes « ActiveState Code》  
https://code.activestate.com/recipes/252158-how-to-freeze-python-classes/

frozen attribute をググると dataclass を使え…っぽくサジェストされる。

これを dataclass で書けば…

@dataclass(frozen=True)
Class Economy:
    x: int = 0
    people: list[Person] = []

…みたいなことになるのかな…だったらいいな…と思って試すと、3.7系だと list が typing.List でないといけないとかある上に、これは 3.9系でも初期値に [] は使えないらしい。代わりに dataclasses.field(default_factory=list) を使えということらしいんだけど、それをしても、economy.people に Person のリストを代入しようとするとダメなんだよね(.append とかなら OK)。実は economy.x への代入もできないので、上の Frozen とは目的が違う感じ。

「気持ち悪い」というのはイイワケで、要は老いた私には難しくて使えないというのが正直なところなのかな…。