在Python中,使用类型作为字典键的更有效方法是什么?给定classObject
,我应该直接使用classObject.__name__
还是对象本身?
答案 0 :(得分:3)
由于类型名称不必在模块之间是唯一的,因此您必须使用类型(classObject
)本身。
幸运的是,类型将自动具有非平凡的哈希值:
>>> class A(object): pass
>>> class B(object): pass
>>> hash(A)
2579460
>>> hash(B)
2579600
答案 1 :(得分:0)
这取决于“更高效”的含义。正如@phihag指出的那样,类对象本身就像__name__
字符串一样具有哈希值,因此从这个角度看它们是同样优秀的字典键。它们可能不同的地方取决于您想要用钥匙做什么。例如,如果您希望以编程方式实例化与您的某个字典键对应的类,则可以直接执行:
class A(object): pass
mydict[A] = 'blah'
# ...
for t,v in mydict.iteritems():
if v=='blah':
o = t() # instantiate the class/key
如果dict键是__name__
字符串而不是实际的类对象,这将会更加棘手。
编辑:好吧,有点棘手。你必须做类似的事情:
o = globals()[t]()
但正如@phihag所提到的,不同的类可能具有相同的__name__
,这可能是个问题。