Pythonの「定数」は6つあるが、挙動がバラバラで奇妙だ

Python's pre-declared constants are kinda weird

PythonにはTrue、False、None、__debug__、Ellipsis(...)、NotImplementedという6つの「定数」が定義されているが、それぞれの扱いが微妙に異なる。True、False、Noneはキーワードであり、識別子として扱われないため、x.TrueはSyntaxErrorになる。__debug__は通常の識別子だが代入が禁止されており、特殊なエラーメッセージが用意されている。一方、EllipsisとNotImplementedは単なる組み込み関数であり、グローバルで上書き可能だ。さらに、TrueやFalseもbuiltinsモジュールの属性として存在し、setattrで変更できるが、その値は反映されない。この記事では、これらの定数の奇妙な挙動と、その背後にある設計上の疑問を探る。

EllipsisとNotImplementedは、他の4つの定数とは異なり、実際には「定数」ではない。単なる通常の組み込み関数であり、グローバルで影にすることができる。

この日のほかの記事

2026-08-25