我試圖減少我的代碼中的複製/粘貼,並且偶然發現了這個問題。我已經搜索了答案,但所有的答案都使用一個類的實例作爲關鍵,我找不到任何關於使用類定義本身作爲關鍵(我不知道是否有可能)。是否有可能在Python 3中使用類作爲字典鍵?
我的代碼是這樣的:
# All chunkFuncs keys are class definitions, all values are functions
chunkFuncs = {Math_EXP : Math_EXPChunk, Assignment : AssignmentChunk, Function : FunctionChunk}
def Chunker(chunk, localScope):
for chunkType in chunkFuncs:
if isinstance(chunk,chunkType):
# The next line is where the error is raised
localScope = chunkFuncs[chunk](chunk,localScope)
return localScope
和錯誤是這樣
TypeError: unhashable type: 'Assignment'
下面是類定義:
class Math_EXP(pyPeg.List):
grammar = [Number,Symbol],pyPeg.maybe_some(Math_OP,[Number,Symbol])
class Assignment(pyPeg.List):
grammar = Symbol,'=',[Math_EXP,Number]
class Function(pyPeg.List):
grammar = Symbol,'(',pyPeg.optional(pyPeg.csl([Symbol,Number])),')'
是否有任何替代方法,我可以用獲得相同的效果?
謝謝。
只要這些類是可散的,它就可以工作。你試過了嗎?發生了什麼? – SethMMorton
@SethMMorton我更新了問題以顯示錯誤和我正在使用的代碼,對於過早的帖子感到抱歉。 – PudgePacket
你應該看看這個帖子:http://stackoverflow.com/questions/7152497/making-a-python-user-defined-class-sortable-hashable。看看第二個答案的後半部分。如果它不可散列,則不能將其用作字典密鑰。 – SethMMorton