PyCon APAC 2023

型チェックを強化するPython 3.11の新機能Data Class Transforms(PEP 681)(Enhancing Type Checking with Python 3.11's New Feature: Data Class Transforms (PEP 681))
2023-10-27 , track 5

本セッションでは、Python 3.11の新機能、Data Class Transforms(PEP 681)について解説します。
PEP 681でtypingモジュールに追加されたdataclass_transformデコレーターは、これまでattrs、Pydantic、O/Rマッパー(例: SQLAlchemy、Django内臓のO/Rマッパー)などのライブラリでの型チェックが十分に効かなかった問題を解決し、より堅牢なコードを実現します。
デコレーターの内部メカニズムも掘り下げ、さらに主要な型チェッカーのPEP 681への対応状況、そして対応ライブラリの紹介も行います。
型安全を確保しつつ、より強力なデータ操作を実現するPythonの新機能を、ぜひ本セッションで学びましょう。


クラスの初期化処理で型チェックが効かない問題の解説

まず最初に、PEP 681登場以前のPythonにどのような問題があったのかを解説します。

PEP 681の恩恵を受けるのは、attrsPydantic、O/Rマッパー(例: SQLAlchemyDjango内臓のO/Rマッパー)などのデータクラス風にクラスを書けるライブラリですが、今回は内部のコードをシンプルにしたオリジナルのO/Rマッパーを用意して説明します。

型チェックを強化するtyping.dataclass_transformデコレーターの使い方について解説

次に、PEP 681でtypingモジュールに追加されたdataclass_transformデコレーターの使い方について解説します。
前述のサンプルコードをdataclass_transformデコレーターを使ったものに変更することで、型チェックが効かない問題を解決できます。

本トークにより、サードパーティライブラリの選定の際に、より適切な判断ができるようになります。
また、自作のライブラリを開発されている方は、dataclass_transformデコレーターの使い方を知ることで型チェックを強化できます。

typing.dataclass_transformデコレーター内部の仕組みについて解説

dataclass_transformデコレーター内部のソースコードについて解説します。dataclass_transformデコレーターのソースコードはとてもシンプルですが、それでも型チェッカーが高度な型チェックをできる理由を説明します。

主要型チェッカーのPEP 681対応状況

主要な型チェッカーでの対応状況を説明します。PEP 681は型チェッカーが対応していないと意味がない機能です。型チェッカーを採用する際、この内容を参考に選定することをお勧めします。

PEP 681に対応しているライブラリの紹介

attrsPydantic、O/Rマッパー(例: SQLAlchemyDjango内臓のO/Rマッパー)などのライブラリでのPEP 681への対応状況を紹介します。
ライブラリの採用を検討する際の判断材料にしてください。

  • 筒井隆次(Ryuji Tsutsui)
  • 1974年10月13日生まれ
  • 北海道出身

住宅販売営業を経て2000年に社内SEとしてIT業界に従事。2011年まではJava、PHPがメイン言語だったが、新しい言語に挑戦しようと思い、幾つか学ぶ中でPythonに出会う。Pythonの言語仕様の簡潔さとコミュニティ活動の活発さに惹かれ、現在までメイン言語として活用している。

現在は株式会社hokanに所属。Djangoを使ったWebサービス開発に従事している。

PyCon JP 2012、PyCon APAC 2013、PyCon JP 2014スタッフ。
Shonan.py、GCPUG Shonan、横浜Rust部などのコミュニティでも活動している。