小编典典

从Python列表继承后重写append方法

python

我想创建一个只能接受某些类型的列表。因此,我试图从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)外,我不确定该做什么。

我应该怎么做呢?


阅读 305

收藏
2020-12-20

共1个答案

小编典典

我对你的课做了一些改动。这似乎正在工作。

一些建议:不要type用作关键字-type是内置函数。使用self.前缀访问Python实例变量。所以用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'>
2020-12-20