組み込み関数名を変数識別子として使用しないことを知っています。
しかし、それらを属性またはメソッド識別子として使用しない理由はありますか?
たとえば、my_object.id = 5
、または自分のクラスでインスタンスメソッドdict
を定義しますか?
インタプリタを混乱させることはありませんが、あなたのコードを読む人々を混乱させるかもしれません。属性およびメソッドに組み込み名を不要に使用することは避けてください。
もう1つの悪影響は、組み込みのシャドウイングがほとんどのpython対応エディター(vi、emacs、pydev、idleなど)の構文ハイライターを混乱させることです。また、lintツールのいくつかはこの慣例について警告します。
はい、それは悪い習慣です。すぐには何も壊れないかもしれませんが、それでもコードの読みやすさは損なわれます。
PEP20から選択的に引用するには:
醜いよりも美しい方がいいです。
シンプルは複雑よりも優れています。
読みやすさは重要です。
実装が説明しにくい場合は、悪い考えです。
myobject.dict()
への呼び出しを見ると、_myobject.__dict__
_を返すか、myobject.id()
がid(myobject)
と同じものを返すと想定するのは自然なことです。
彼らは彼らが間違っていることを知ることが可能です。しかし、それは時間と努力を要し、おそらく彼らがそれを理解する間、いくつかの間違いにつながるでしょう。属性_myobject.object_id_number
_の呼び出しははるかに長くなりますが、id(myobject)
とは異なることが明確になります
いいえ、それで結構です。オブジェクト参照が必要なため、組み込みオブジェクトをシャドウする方法はありません。
入力変数がpython builtinsを模倣している場合、関数について何度も行ったり来たりします。たとえば、Word bytes
はpython builtin 、しかしバイトを解析するユーティリティライブラリを考えてみましょう:
def parse_bytes(bytes):
pass
これは素晴らしい読みやすさだと主張しますが、pep8リンターはそれが好きではありません。代わりに
def parse_bytes(bytearray):
pass
def parse_bytes(somebytes):
pass
またはタイプヒントを使用する
def parse_bytes(b: bytes):
pass
しかし、これらすべてはさらに悪いようです。変数名がinput
...の場合も同じことが起こります。
一日の終わりには、いつもsomebytes