我有一个类可以跟踪搜索操作期间遇到的错误
class SearchError(object):
def __init__(self,severity=0,message=''):
self.severity = severity
self.message = message
我的想法是使实例变量可索引。
所以如果我有
a=SearchError(1,"Fatal Error")
我明白了
>>> a[0]
1
>>> a[1]
'Fatal Error'
>>> a.severity
1
>>> a.message
'Fatal Error'
为此,我__getitem__
向类添加了一个方法。类现在变成
class SearchError(object):
def __init__(self,severity=0,message=''):
self.severity = severity
self.message = message
def __getitem__(self,val):
if isinstance(val,slice):
return [self.__getitem__(i) for i in xrange(val.start,val.stop,val.step)]
elif val==0:
return self.severity
elif val==1:
return self.message
else:
raise IndexError
这可以满足我的要求,但在以下情况下会失败
>>> a[:2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 23, in __getitem__
TypeError: an integer is required
甚至
>>> a[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 29, in __getitem__
IndexError
我知道我的实施__getitem__
是有限的。我需要知道的是——
- 这是使实例变量可索引的方法(不使用列表作为变量容器)吗?
- 就索引而言,如何使对象表现得“正常”?