[解決済み] Pythonのset([])はどのように2つのオブジェクトが等しいかどうかをチェックするのですか?これをカスタマイズするために、オブジェクトはどのようなメソッドを定義する必要があるのでしょうか?
2023-02-09 23:01:03
質問
Pythonで、私が定義した他のオブジェクトの記録を保持する「コンテナ」オブジェクトまたはクラスを作成する必要があります。このコンテナの1つの要件は、2つのオブジェクトが同一であると判断された場合、1つ(どちらか1つ)を削除することです。私が最初に考えたのは
set([])
を含むオブジェクトとして使用し、この要件を満たすことでした。
しかし、このセットでは、2つの同じオブジェクトインスタンスのうちの1つを削除することはできません。1つを作成するために何を定義しなければなりませんか?
以下はPythonのコードです。
class Item(object):
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
def __repr__(self):
return "Item(%s, %s)" % (self.foo, self.bar)
def __eq__(self, other):
if isinstance(other, Item):
return ((self.foo == other.foo) and (self.bar == other.bar))
else:
return False
def __ne__(self, other):
return (not self.__eq__(other))
インタープリタ
>>> set([Item(1,2), Item(1,2)])
set([Item(1, 2), Item(1, 2)])
これは明らかに
__eq__()
で呼び出される
x == y
によって呼び出されるメソッドは、セットによって呼び出されるメソッドではありません。何が呼び出されるのでしょうか?他にどのようなメソッドを定義しなければならないのでしょうか?
注意
Item
は変更可能である必要があり、変更される可能性があるので、私は
__hash__()
メソッドを提供することはできません。もしこの方法しかないのであれば、immutableを使用するように書き換える
Item
s.
どのように解決するのですか?
恐れ入りますが
__hash__()
メソッドを用意する必要があります。しかし、このメソッドが
Item
.
関連
-
[解決済み] スクリプトを実行しているPythonのバージョンを確認するにはどうしたらいいですか?
-
[解決済み] Pythonのオブジェクトが持っているメソッドを検索する
-
[解決済み] Pythonのオブジェクトが "subscriptable "であるかどうかは、どういう意味ですか?
-
[解決済み] Pythonで2つのdatetimeオブジェクト間の時間差を見つけるにはどうすればよいですか?
-
[解決済み】2つの辞書を比較して、(キーと値)のペアがいくつ等しいかをチェックする。
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] バブルソートの宿題
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] Pythonの辞書にあるスレッドセーフについて
-
[解決済み] ne__は__eq__の否定として実装されるべきか?