使用 Python 编程时,执行类型检查并不常见。您是否确定需要您的列表仅接受一种类型(及其子类型),或者您是否相信程序员会阅读您的文档而不会将不应该存在的内容放入其中?
如果是这样,这里有一个继承自的示例泛型类collections.MutableSequence
这可能会做你想要的:
from collections import MutableSequence
class VerifierList(MutableSequence):
_list = None
def __init__(self, allowedClasses, *args, **kwargs):
super(VerifierList, self).__init__()
self._list = list(*args, **kwargs)
self.allowedClasses = tuple(allowedClasses)
def __repr__(self):
return repr(self._list)
def __str__(self):
return str(self._list)
def __len__(self):
return len(self._list)
def __getitem__(self, index):
return self._list[index]
def __setitem__(self, index, value):
if not isinstance(value, self.allowedClasses):
raise TypeError('Value of type %s not allowed!' % value.__class__.__name__)
self._list[index] = value
def __delitem__(self, index):
del self._list[index]
def insert(self, index, value):
if not isinstance(value, self.allowedClasses):
raise TypeError('Value of type %s not allowed!' % value.__class__.__name__)
self._list.insert(index, value)
使用方法如下:
>>> class A(object): pass
>>> class B(object): pass
>>> l = VerifierList((A,))
>>> l.append(A())
>>> print(l)
>>> [<__main__.A object at 0x000000000311F278>]
>>> l.append(B())
Traceback (most recent call last):
File "<pyshell#228>", line 1, in <module>
l.append(B())
File "C:\Python27\lib\_abcoll.py", line 661, in append
self.insert(len(self), value)
File "<pyshell#204>", line 23, in insert
raise TypeError('Value of type %s not allowed!' % value.__class__.__name__)
TypeError: Value of type B not allowed!