型チェッカーの歴史と性能比較について少しだけ掘り下げます
型チェッカーの歴史と性能比較について少しだけ掘り下げます
ABEJA でプロダクト開発を行っている平原です。 先日、バックエンドで使っているGo言語のお勉強しようと「go言語 100Tips ありがちなミスを把握し、実装を最適化する」を読んでいました。その中でinterfaceは(パッケージを公開する側ではなく)受け側で定義するべきという記述を見つけてPythonでも同じことできないかと調べていると(PythonではProtocolを使うとうまくいきそうです。)、どうやら型ヒント機能がかなりアップデートされていることに気づき慌てて再入門しました。(3.7, 3.8あたりで止まってました。。) この記事では、公式ドキュメントを見ながら適当にコードを書き散らし、どの機能はどこまで使えるのか試してみたことをまとめてみました。 docs.python.org 環境 Python: 3.12.1 エディタ: Visual Studio Code Pylan
概要 Python には他の静的型付け言語のような明確な interface キーワードがありませんが、それに代わる Protocol という概念を最近知りました。 そこで、個人的に好んで使っている「Service クラスに Repository を注入する」という DI(依存性注入)パターンを、この Protocol を使って Python でどう実現できるか試してみることにしました。 この記事では、dependency-injector も組み合わせ、その具体的な実装方法をサンプルコードと共に備忘録として残します。 今回使ったコードは以下に置いてあります。 Protocol でインタフェースを定義する まずはインタフェースを Protocol を使って定義します。 Protocol とは Python の Protocol は、Go 言語の interface に非常によく似た概念です
pydantic-graphの中のコードを読みながら、どのように実装されているかを見てみました。 概要 AIエージェントライブラリであるPydanticAIの機能の一部にpydantic-graphがあります。 これは、Python用の非同期グラフおよびステートマシンを作るためのライブラリですが、なかなかこの機能単体で使用する場面は少ないと思います。 今回はこのライブラリがどのように実装されているかをコードを追いながら見ていきます。 本文中のコード: https://github.com/hosimesi/code-for-techblogs/tree/main/pydanticai_graph PydanticAIとは PydanticAIは、生成AIのアプリケーションを作るためのPythonフレームワークです。前回の記事でも取り扱ったので、詳しくは公式ドキュメントとこちらを参照してくだ
目次 はじめに PEP全文 このPEPが提案された経緯 「混乱のもと」とは何か 型変数のスコープルールがわかりにくい いつcovariantとcontravariantを使う(使わない)べきかわかりにくい 型引数の順番ルールがわかりにくい グローバルに宣言しているので「すべての参照」に引っかかる 型変数の命名にはプライベート性と冗長さを意識しなければならない TypeVarライクやGenericライクなシンボルをtypingからインポートする必要がある PEP695導入後にPythonの書き方はどう変わるか TypeVarシンボルの宣言を新たな構文に置き換えることができる 関数の場合 クラスの場合 Protocolを定義するための構文 TypeVarTupleやParamSpecの宣言を代替する構文 ジェネリック型エイリアスを表現するためのtype文の登場 型の束縛(TypeVarのbou
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く