类型词典

时间:2011-11-27 14:45:30

标签: python types dictionary

在Python中,使用类型作为字典键的更有效方法是什么?给定classObject,我应该直接使用classObject.__name__还是对象本身?

2 个答案:

答案 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__,这可能是个问题。