我想创建一个只能接受某些类型的列表。因此,我试图从Python中的列表继承,并像这样覆盖append()方法:
class TypedList(list): def __init__(self, type): self.type = type def append(item) if not isinstance(item, type): raise TypeError, 'item is not of type %s' % type self.append(item) #append the item to itself (the list)
这将导致无限循环,因为append()的主体会自行调用,但是除了使用self.append(item)外,我不确定该做什么。
我应该怎么做呢?
我对你的课做了一些改动。这似乎正在工作。
一些建议:不要type用作关键字-type是内置函数。使用self.前缀访问Python实例变量。所以用self.<variable name>。
type
self.
self.<variable name>
class TypedList(list): def __init__(self, type): self.type = type def append(self, item): if not isinstance(item, self.type): raise TypeError, 'item is not of type %s' % self.type super(TypedList, self).append(item) #append the item to itself (the list) from types import * tl = TypedList(StringType) tl.append('abc') tl.append(None) Traceback (most recent call last): File "<pyshell#25>", line 1, in <module> tl.append(None) File "<pyshell#22>", line 7, in append raise TypeError, 'item is not of type %s' % self.type TypeError: item is not of type <type 'str'>