ドキュメントを見て、特にhttp://docs.python.org/2/reference/expressions.html#isを見ても、Pythonキーワードis
の実装を定義するdunder/protocolメソッドはまだ見つかりません。どんな方法でそれを決定するのですか?私が理解するところでは、is
はすべて、2つのオブジェクトで呼び出されたときのid
関数の結果を比較することです。`is 'のPython dunderメソッド
8
A
答えて
10
is
のダンダー法はありません。あなたはそれを上書きすることはできません。それは意図的です。 is
の全体点は、2つの式が同じ値を参照しているかどうかを示しています。したがって、定義上、2つの異なる値に対して、偽でなければなりません。したがって、それを無効にする必要はありません。 the docsとして
は、それを置く:
オペレータ
is
及びオブジェクトIDのnot is
試験:のみならXおよびyが同じオブジェクトである場合x is y
が真です。
(Data model docsにもう少しあります。)
また、is
はid
の結果を比較しません。
id
は、 "このオブジェクトの寿命中に一意で定数であることが保証されている整数"を返すように定義されています。つまり、is
は確かにとなります。はid
となりますが、どこに実装されているかわかりません。
CPythonでは、実質的にはカバーの下で同じことをします。はポインタが等しいことを確認し、id
はポインタを整数にキャストして返します。だから、id
を使って直接実装するか、それを実装するかの唯一の違いは、関数呼び出しの余分なペアと、マシンコードなしでコンパイルするキャストです。
しかし、他の実装でもそれは当てはまりません。 (明らかに、JythonとPyPyがポインタのようなものでさえない言語で書かれていると考えると)PyYyでは、is
はRPythonオブジェクトが同じであることを確認します。id
その場で生成されたキーを返します(後でid
を同じ値にコールするとキャッシュされます)。
関連する問題
- 1. dunderメソッドは継承されていますか?
- 2. Pythonの "is"文とタプル
- 3. Pip is not working python 3.6
- 4. Python If Elseif Else is strange
- 5. dunder __bool__を複数クラスに継承する方法
- 6. 'x is None'の問題、python 3.x
- 7. isCellEditable is not is Swing
- 8. Python MySQLdbクエリパラメータ "= NULL"ではなく "IS NULL"
- 9. Pythonクラス - メソッド
- 10. Spring - SaltSource is null
- 11. Python string find()メソッド
- 12. Pythonのフラスコ - POSTメソッド
- 13. 同じPythonクラスのメソッド、クラスメソッド、静的メソッド
- 14. HttpContext.Current.Session is null + OWIN
- 15. Python __imul __()メソッド
- 16. PythonのCopyTreeメソッド
- 17. Pythonのdefault()メソッド
- 18. pythonのstring.replaceメソッド
- 19. Jsonエラー:「end is bounds」?
- 20. VimはVimの中<code>is</code>に<code>is</code>からのPythonと
- 21. React this.setState is undefined
- 22. NSURLSessionUploadTask originalRequest httpBody is Null
- 23. エラー:「contains is a function is not ionic」2
- 24. CRITERIA IS
- 25. Docker-compose '' NoneType 'is iterable' '
- 26. setVisibility is in android
- 27. iOS indexPath is nil(カスタムアクセサリーイメージ)
- 28. Shapely is No Win32アプリケーション
- 29. コーディングスタイル(PEP8) - モジュールレベル "dunders" "Dunder"(<strong>D</strong> ouble <strong>スコア</strong>下)の
- 30. Pythonのメソッドが8
あなたは正しいです。 'id'はオブジェクトのメモリ位置を返します。したがって、オブジェクトをRAMの特定の場所に配置しない限り、独自の 'is'実装を書く必要はありません。 2つのオブジェクトの等価性をチェックする場合は、代わりに '__eq__'を使用してください – inspectorG4dget
@ inspectorG4dgetありがとう! –
私はちょうど[dunder](http://wiki.python.org/moin/DunderAlias)の意味を学びました! –