感想
わりと新しめの機能が多くて知識のアップデートになって良かった。
書籍のリンク
1章 ロバストPython入門
コードの意図を伝えるのが大事
意図を伝えるための手法
第I部 型アノテーション
2章 Pythonデータ型入門
動的型付けと静的型付け
ダックタイピング
型システムはデータの振る舞いの雛形と制約を示す
3章 型アノテーション
型アノテーションは基本使うべきだが、自明なところでは使うべきではない。
4章 型制約
Optional,Union,Literal,Annotated,NewType,Final
5章 コレクション型
TypedDict,Typevar,Generic
カスタムコレクション
collections.UserDict,UserString,UserList
collections.abc.Set
6章 型チェッカのカスタマイズ
mypy,pyre,pyright
7章 実践的な型チェックの導入
ペインポイントを特定する
適用コードを絞り込む
monkeytype,pytype
第II部 ユーザ定義型
8章 列挙型
Enum,auto(),Flag,@unique
IntEnum,IntFlagはどうしても必要なら使う
9章 データクラス
dataclass
等価比較eq=Ture
比較order=True
イミュータブルfrozen =True
listに要素を追加などはできちゃうので注意
TypedDict,namedtupleよりは、基本的にデータクラスを使うべき
10章 クラス
データクラスではなくクラスを使うのは不変式があるとき
11章 インターフェースの定義
自然なインターフェースを目指す
テスト駆動開発
README駆動開発
ユーザビリティテスト
特殊メソッド
コンテキストマネージャで耐障害性を高める
12章 部分型
継承する場合はリスコフの置換原則に従う
継承を使う理由はis-a関係をモデリングすること
そうでないならコンポジションにするべき
13章 プロトコル
構造的部分型(オブジェクトが持っているプロパティ)のチェック
Protocol
14章 pydanticによる実行時型チェック
pydantic
組み込みバリデータ
カスタムバリデータ
型を厳密にしたい場合はstrictフィールドを使う
第III部 大規模な変更への対応
15章 拡張性
開放閉鎖の原則
実践しすぎると可読性が下がる
16章 依存関係
依存関係可視化ツール
pipdeptree,graphviz,gprof2dot,pyan3
17章 コンポーザビリティ
ポリシーとメカニズムを分ける
デコレータ
18章 イベント駆動アーキテクチャ
Pub/Subアーキテクチャ
Observerパターン
pypubsub
ストリーミングイベント
rx
19章 プラガブルPython
TemplateMethodパターン
Strategyパターン
プラグインアーキテクチャ
stevedore
第IV部 セーフティネットの構築
20章 静的解析
pylint,mccabe
セキュリティ解析
dodgy
bandit
21章 テスト戦略
テストピラミッド
AAAテスト
テーブル駆動テスト
pytest,pyhamcrest
22章 受け入れテスト
振る舞い駆動開発
vehave
23章 プロパティベーステスト
hypothesis
24章 ミューテーションテスト
テストのテスト
mutmut