属性アクセスの構文上の制限は(少なくともCPythonと2.7.2の実装では)Pythonで、あります:属性名をPythonキーワードにできないのはなぜですか?
>>> class C(object): pass
>>> o = C()
>>> o.x = 123 # Works
>>> o.if = 123
o.if = 123
^
SyntaxError: invalid syntax
私の質問は二つです:
- は、根本的な理由がありますなぜPythonのキーワード属性名(
o.if = 123
のように)を使用することは禁じられていますか? - 上記の属性名の制限は文書化されていますか?
それは感覚が私のプログラムの一つで、o.class = …
を行うことになるだろう、と私はそれを行うことができていない少しがっかりしています(o.class_
働くだろうが、それはのように単純では見えません)。
PS:明らかに、if
とclass
はPythonのキーワードです。質問はです。なぜならというキーワードを属性名として使用することは禁じられています(私はo.class = 123
の式にあいまいさはありません)。がと記載されているかどうかです。
キーワードは常にキーワードでありコンテキストではない場合、パーサーが簡単であるためです。だから、コードは属性アクセスがあるところまで到達していないので、構文解析レベルの構文エラーです( 'if'は文法の一部であり、決してこの場所には現れません)。ほとんどの言語で同じですが、そのための文法は言語文法です。 –
また、 'cls'は通常、クラスへの参照を保持する名前に使用されます。 –
キーワードを変数/関数名と区別できるパーサーがあっても、コーナーケースでは他のものをシャドーすることはできません。あなたが数十の名前の使用を禁止するだけで真実を維持するのはずっと簡単です。 –