首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型字典

类型字典
EN

Stack Overflow用户
提问于 2011-11-27 22:45:30
回答 2查看 113关注 0票数 2

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-27 22:51:56

由于不同模块的类型名不必是唯一的,因此必须使用类型(classObject)本身。

幸运的是,类型将自动具有一个非平凡的散列值:

代码语言:javascript
复制
>>> class A(object): pass
>>> class B(object): pass
>>> hash(A)
2579460
>>> hash(B)
2579600
票数 3
EN

Stack Overflow用户

发布于 2011-11-27 23:01:52

这取决于你所谓的“更高效”是什么意思。正如@phihag指出的那样,类对象本身的散列效果与__name__字符串一样好,因此从这个角度来看,它们是同样好的字典关键字。它们的不同之处取决于您想要如何处理这些键。例如,如果您希望以编程方式实例化与某个字典键相对应的类,则可以非常简单地这样做:

代码语言:javascript
复制
class A(object): pass
mydict[A] = 'blah'

# ...

for t,v in mydict.iteritems():
    if v=='blah':
        o = t() # instantiate the class/key

如果Dict键是__name__字符串而不是实际的类对象,这将更加棘手。

编辑:嗯,有点棘手。你必须做一些类似这样的事情:

代码语言:javascript
复制
o = globals()[t]()

但正如@phihag提到的,不同的类可能具有相同的__name__,这可能是一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8286344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档