Python内置类型的子类化

7 投票
2 回答
3077 浏览
提问于 2025-04-17 13:25

这段代码有什么问题呢?

class MyList(list):
  def __init__(self, li): self = li

当我用比如说 MyList([1, 2, 3]) 创建一个 MyList 的实例时,然后我打印这个实例,结果却只得到一个空列表 []。如果 MyDict 是从 list 继承来的,那 MyDict 不应该也是一个 list 吗?

注意:这在 Python 2.x 和 3.x 中都是这样。

2 个回答

-1

我自己搞明白了:self 是一个 list 的子类的实例,所以它不能被转换成普通的列表,尽管它还是一个 MyList 对象。

15

你需要调用列表初始化器:

class MyList(list):
     def __init__(self, li):
         super(MyList, self).__init__(li)

在函数中给self赋值只是把本地变量替换成了列表,并没有把任何东西赋值给实例:

>>> class MyList(list):
...      def __init__(self, li):
...          super(MyList, self).__init__(li)
... 
>>> ml = MyList([1, 2, 3])
>>> ml
[1, 2, 3]
>>> len(ml)
3
>>> type(ml)
<class '__main__.MyList'>

撰写回答