在Python中,使用类型作为字典键的更有效方法是什么?给定一个classObject,我应该直接使用classObject.__name__还是对象本身?
发布于 2011-11-27 22:51:56
由于不同模块的类型名不必是唯一的,因此必须使用类型(classObject)本身。
幸运的是,类型将自动具有一个非平凡的散列值:
>>> class A(object): pass
>>> class B(object): pass
>>> hash(A)
2579460
>>> hash(B)
2579600发布于 2011-11-27 23:01:52
这取决于你所谓的“更高效”是什么意思。正如@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__,这可能是一个问题。
https://stackoverflow.com/questions/8286344
复制相似问题