この Tips シリーズでは、#9 までに基本的なデータ構造、#17 までに Pythonイディオム、#30 までに Python実践スキル を紹介してきました。
今回は Python深掘りスキル の7回目として、__slots__ を取り上げます。今回も「なぜ必要か・どう役立つか」を大切にしながら進めます。
Pythonのクラスは非常に柔軟で、インスタンスに後から自由に属性を追加できます。
class Cat:
pass
cat = Cat()
cat.name = "Chii"
cat.age = 8
これは便利ですが、実は次のような問題が潜んでいます。
- タイポしても気づけない(
cat.weigth = 4.2もエラーにならない) - 大量のインスタンスを生成するとメモリ消費が増える
- クラスがどの属性を持つのかコードから読み取りにくい
こうした問題を解決する仕組みが __slots__ です。