【发布时间】:2013-10-14 20:42:39
【问题描述】:
我正在尝试减少代码中的复制/粘贴,但偶然发现了这个问题。我已经搜索了答案,但所有答案都使用类的实例作为键,我找不到使用类定义本身作为键的任何内容(我不知道是否可能)。
我的代码是这样的:
# 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 我更新了问题以显示错误和我正在使用的代码,对于过早的帖子感到抱歉。
-
你应该看看这篇文章:stackoverflow.com/questions/7152497/…。查看第二个答案的后半部分。如果您的类不可散列,则不能将其用作字典键。
-
pyPeg.List是从哪里来的?发生了一些奇怪的事情。也许pyPeg是一个过于花哨的;-) 框架玩元类游戏 - 你必须努力使类对象不可散列。 -
顺便说一句,您没有显示回溯:确切地说,哪一行触发了
TypeError?而且,是的,您可以使用id(some_class_object)作为字典键。
标签: python hash dictionary python-3.x