Python内置类型子类化

时间:2013-01-23 16:40:24

标签: python initialization subclassing built-in-types

此代码有什么问题?

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

当我使用MyList创建MyList([1, 2, 3])的实例,然后我打印此实例时,我得到的只是一个空列表[]。如果MyDict正在继承list,那么MyDictlist本身吗?

注意:在Python 2.x和3.x中都有。

2 个答案:

答案 0 :(得分: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'>

答案 1 :(得分:0)

我自己想出来了:selflist的子类的实例,因此无法将其转换为仍然是MyList对象的列表。