看板 Python 關於我們 聯絡資訊
各位版友好 如果我有一個 class point: ... def __hash__(self): return self.x+self.y 我想要建立一個class繼承自point,並且override __hash__(self) 可是由於只要用到一次 所以不想再額外建立subclass 在java中可以用anonymous inner classes做到 但在python可以做到嗎? 有查到可以用type(name, bases, dict)做到 不過看還是有點不簡潔.. 有更簡潔的方法嗎? -- ~宅男的四個徵兆~ ∠□ ○ ! * \○/ ★    (○ ? ╦╦└□ " ○□═ □   □> ║║√√ ╦══╦ ∥    |\ 一回家就上PTT 每天想正妹 以當好人為樂 忘記正妹虧欠自己 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.39.110.109
uranusjr:Inner class 可以, anonymous 不行 10/05 17:39
darkgerm:python 好像不能動態改 __hash__ 不太知道為什麼@@ 10/06 14:32
darkgerm:不過剛剛查了一下,type 我覺得很好啊~ 10/06 14:41
darkgerm:恩...不過 function 不能縮成 lambda 的話要另外寫就是了 10/06 14:42
sonyu:另外訂 self.custom_hash_function, 然後 __hash__ 去 call 10/06 16:06
sonyu:只是這樣會多呼叫的成本, inner class 或是 type 都不錯啊 10/06 16:07
sonyu:p.s. 也許不一定要用 __hash__ 來實作? 10/06 16:13
sonyu:__hash__() 理論上不能變, 所以應該在 class 定義裡改 10/06 16:17
sonyu:而不要動態去改物件的 __hash__,有點 hack 啦 10/06 16:17
uranusjr:動態改 hash 邏輯上不通, hash 應該要可以代表該物件本身 10/07 11:26
uranusjr:會動態改變的話豈不是代表該物件會自動變形, 又不是在演 10/07 11:27
uranusjr:魔鬼終結者 2 那個液態金屬人... 10/07 11:28