Pythonのsetでnamedtupleの集合演算する事が目的です
python
1from typing import NamedTuple 2 3class A(NamedTuple): 4 a: int 5 b: int 6 def __hash__(self): 7 return self.a 8 def __eq__(self, other): 9 return self.a == self.b
このようなNamedtupleが定義されているとします。これをaをキーにした集合演算を行いたいです。
特殊なメソッド__hash__
と__eq__
を定義したのでaが同じであれば同一のオブジェクトになるはずです
docs.python.org
しかし想定とは異なる動きをします。
commandline
1>>> a = A(1,2) 2>>> b = A(1,3) 3>>> w = set([a]) 4>>> w 5{A(a=1, b=2)} 6>>> w.add(b) 7>>> w 8{A(a=1, b=2), A(a=1, b=3)}
aが同じなので上書きされなければならないはず、しかし異なるオブジェクトとして挿入されています。
何かわかる方は回答の方をよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。