我这样做的Python:一类使用__getitem__和使用中发现,项目
class dumb(object):
def __init__(self):
self.g = {}
def __getitem__(self,key): return self.g[key] if key in self.g else None
def __setitem__(self,key,val):
self.g[key] = val
te = dumb()
te[1]=2
te[1]
Out[4]: 2
1 in te
和它挂..
所以,如果我想寻找这样的事情,我怎么去做?请不要告诉我子类字典的子类。
在此先感谢!
可能相关的问题在这里问: What does __contains__ do, what can call __contains__ function
顺便说一下,挂的原因是,当没有'__contains__'方法可用,但有一个'__getitem__',它会尝试从0开始的所有可能的索引。由于'__getitem__'方法永远不会引发异常(它只返回None),所以它会一直尝试无限次。 (你可以在'__getitem__'方法中加入'print key'来确认这一点) –
为什么你不想子类字典的任何特殊原因? – mbatchkarov
@mbatchkarov因为它使用其他函数不是特定于字典,我不想限制它类的东西(类型1,类型2)和所有mro适合遵循这是反正不是这里的情况。在那里定义了许多方法。 – user2290820