2013-06-04 10 views
7

私はソースコードプロジェクトで何らかの適合性チェックを実行する一連のPython関数を書いています。これらの関数の名前を非常に詳細に指定したいと思います。例:check_5_theVersionOfAllVPropsMatchesTheVersionOfTheAutolinkHeader()Pythonの属性名の最大長はどれくらいですか?

このように長い名前は、Pythonでは問題になるでしょうか?属性名の最大長はありますか? Pythonの言語リファレンスから

+4

しないでください。長い名前は必ずしも悪いわけではありませんが、コードの匂いです。この場合、私は名前を短縮し、より詳細な説明をドキュメント文字列に入れます。また、結果を冗長にログに記録するか、失敗したチェックを説明する明確な例外をスローします。 –

答えて

25

2.3. Identifiers and keywords

識別子の長さは無制限です。


しかし、あなたは本当にクールされていない、最も可能性の高いPEP-8に違反することがあります:

リミット79文字の最大のすべての行を。

また、あなたは(パイソンの禅)PEP-20に違反することがあります:

可読性がカウントされます。

+0

よくありがたいですが、読みやすさの面では、私はその数を見逃すことはできません:これは私がここで達成しようとしているものです。関数の名前は、それが何をしているかを示します。私がそれを省略すると、読みにくくなります。 (8分で回答を受け付けます) –

+4

@AlexanderTobiasHeinrichあなたのコードは絶対に読めません_。 [docstrings](http://www.python.org/dev/peps/pep-0257/)を使用してください。 – kirelagin

+3

「完全に記述的」および「読み取り可能」は、2つの別個のものである。長い、長いラクダの弦は前者であり後者ではない。 – chepner

4

これらはプログラマにとって問題になる可能性があります。ファンクション名は合理的に短くしておき、ドキュメントストリングを使用してドキュメント化してください。

1

アトリビュート名はハッシュ化されており、遭遇するクラスの99%に対してinst.__dict__のキーに変換されるため、実際の長さに制限はありません。ハッシュ可能な限り、属性名として機能します。 __setattr__ \ __getattr__ \ __getattribute__のように、ハッシュ可能なものが有効な属性名であることを保証する方法で他の1%のクラスに対しては、前の説明は適用されません。

もちろん、他の人が指摘しているように、より長い名前付き属性では、コードスタイルと品質の問題があります。そのような長い名前が必要な場合は、プログラムの設計上の欠陥を示している可能性があります。データをより階層的な構造にし、関数とメソッドの責任を抽象化し、分割する方がよいでしょう。

+0

インタープリターはそれぞれの呼び出しでメソッド名をハッシュしていると本当に思っていますか? – kirelagin

+0

'通訳者が各呼び出しでハッシュメソッドの名前を解釈しない場合は、参照してください... ' – hexparrot

+0

JITや他の種類の最適化または先読みインタープリタを使用していない限り(私の知るところではCPythonはありません)はい。 –

関連する問題