listPython の予約語だったら防げたはずのバグに少しだけ気付きました。(確かに、私の側ではばかげています。)
では、なぜ list (または dict や float などの型) が予約語ではないのでしょうか? ルールを覚えようとするよりも、インタープリター エラーを追加する方が簡単なようです。
(また、Eclipse/PyDev には、このルールを思い出させる設定があることも知っています。これは便利です。)
listPython の予約語だったら防げたはずのバグに少しだけ気付きました。(確かに、私の側ではばかげています。)
では、なぜ list (または dict や float などの型) が予約語ではないのでしょうか? ルールを覚えようとするよりも、インタープリター エラーを追加する方が簡単なようです。
(また、Eclipse/PyDev には、このルールを思い出させる設定があることも知っています。これは便利です。)
キーワードのみが予約されています。
liststr、set、dict、unicode、int、floatなどのように、キーワードではなく組み込み型です。
可能なすべての組み込み型を予約しても意味がありません。python は動的言語であり、組み込み型をシャドウするローカル名に置き換えたい場合は、できるはずです。
listおよびその他の型は、事前にインポートされたオブジェクト型のライブラリと考えてください。defaultdictからも予約されるとは思いませんcollectionsか?
このようなエラーをキャッチするには、静的コード アナライザーを使用します。ほとんどの IDE では、簡単に統合できます。
これを見てください:http://docs.python.org/2/reference/lexical_analysis.html#keywords
listは単なる型であり、予約されていません (どちらもint, float, dict, str... ではありません)。
これはちょっとした意見の質問ですが、これが私の 2c です。
キーワードを予約済みにすることは重要です。基本的に、そのキーワードをコードで使用できないことを意味するため、リストを短くすることがプログラミング言語の設計として優れていると見なされることがよくあります。(perl はそうではありませんが、perl は他のほとんどのプログラミング言語とはまったく異なる哲学を持っており、変数の前に特殊記号を使用して衝突を防ごうとしています)。
とにかく、これが事実である理由を確認するには、前方互換性を検討してください。Python の開発者が、それarrayが非常に基本的な概念であると判断し、それをビルトインにしたいと考えていると想像してください (考えられないことではありません - これsetは、ええと、python 2.6 で起こりましたか?)。ビルトインが自動的に予約されている場合、以前arrayに他の何かに使用したり (明示的に としてインポートした場合でもfrom superfastlist import array)、独自に実装したりした (numpyこれを行った) 人は、コードが機能しないことに突然気付くでしょう。非常に怒っています。
(さらに言えばhelp、が予約語にされたかどうかを検討してください-argparseを含む無数のライブラリhelpがキーワード引数として使用されています)
おそらく、クラスにプライベート属性がないのと同じ理由です。これがPythonの精神です。