有没有什么办法让类的列表像Python中的一组行为一样?Python - 从列表中使用密钥访问一个类
基本上,我正在研究一些涉及字符串比较的软件,并且我有一个用于处理字符串的自定义类。因此,每个字符串都有一个类的实例。
因此,我有一个包含所有这些类的大型列表。我想能够访问它们,如list[key]
,在这种情况下,键是一个字符串,该类是基于(注意:字符串永远不会改变,一旦类实例化,所以它应该是可哈希)。
在我看来,我应该可以轻松地做到这一点,在课堂上添加诸如__cmp__
之类的内容,但要么我是钝的(可能),要么我在文档中缺少某些内容。
基本上,我希望能够做这样的事情(Python提示符为例):
>>class a:
... def __init__(self, x):
... self.var = x
...
>>> from test import a
>>> cl = set([a("Hello"), a("World"), a("Pie")])
>>> print cl
set([<test.a instance at 0x00C866C0>, <test.a instance at 0x00C866E8>, <test.a instance at 0x00C86710>])
>>> cl["World"]
<test.a instance at 0x00C866E8>
谢谢!
编辑一些额外的改动:
class a:
... def __init__(self, x):
... self.var = x
... def __hash__(self):
... return hash(self.var)
...
>>> v = a("Hello")
>>> x = {}
>>> x[v]=v
>>> x["Hello"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Hello'
>>> x["Hello"]
SET使用索引而不是键。字典看起来更像你想要的,但是你使用的是传递(“你好”)的密钥,并试图用不同的值 - “你好”来检索它。 – 2010-04-05 10:08:29
您还应该为类__a__定义\ _ \ _ cmp \ _ \ _方法,这将在散列值冲突的情况下调用。 – Yaroslav 2010-04-05 10:18:25
请使用UpperCase名称作为类别。请继承对象。像这样:'A类(对象)'。这将使我们更容易阅读,也更容易让你弄清楚。 – 2010-04-05 10:23:00