typingmypyで使えるProtocolが便利という話の例。subtypingをやる際にgoでもほしいと想うことが多かった例がProtocolでは大丈夫なので良いなーという例(今回はそのうちのひとつだけを紹介)。Protocol?Protocolをいつ使いたくなるかというと、大抵は複数ある何かを同一視したくなった場合。以下の様な例があげられる。subtypingが欲しくなる。これ用のinterfaceをProtocolと呼んでいる。nameが欲しいだけの状況を考えてみる。いう関数に渡されることをイメージした状態。o.namenameが取得できれば同じと見做す。そのような状況のときに、外から眺めた見た目としては、以下の2つのクラスは同じふるまいをするように見える(属性アクセスでnameが取れるので)。self.typ.__name__例えば以下の様な形で使われる。記述そんなわけで上の様に動作することを期待するProtocolを記述したい。見た目だけで考えると以下のように書けると思うかもしれない。nameが見えれば良いので。strしかしこれはだめ。以下のようなエラーが出る。attributeエラーの意味はwriteableでもある属性を期待しているがread-onlyな属性が渡されているよということ。前者は後者を内包しているから一見通るのが正しいと感じもするけれど、確かに安全性の観点から考えるならread-onlyであることを強調したい(まじめに色々なことは考えていないけれど。意図しないミスを防ぎたいという観点で考えるとこの2つを混同して使っている状況に危うさを感じたりはしそう)。そんなわけで以下の様なProtocolを書いてあげると大丈夫。...というわけで先程まで秘密にしていたget_name()の定義は以下の様になる。o.name今度は以下が動く。get_name(object())goでもこういうinterface(pythonでのProtocolは概ねgoのinterface)を定義したいのだよなー。自動生成系のやつなどでstructに値を持つ形で済ませられれば最高なのだけれど、メソッドを強制されたりするので。05protoco.pyやりましたね。なんでそんなことがしたくなったかという...2019-09-23pythonでlogging.Loggerとlogging.LoggerAdapterを許す型を定義...pythonでlogging.Loggerとlogging.LoggerAdapterを許す型を定義...2018-08-25mypyのdmypyの実装のされ方を覗いてみたmypyのdmypyの実装の仕方を把握する。知りたいことは裏側でのpr...2018-08-24あとで調べる:mypyで分割代入でのエラーはtyping.Tupleなどの型のときしかみない?以下のコードが通ってしまう。...2018-08-23mypyとTypedDictとtotalオプションについてpythonでもdictに型を付けたいですね。componentという機能を追加した月別アーカイブはてなブログをはじめよう!podhmoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。