Python内置类型的子类化
这段代码有什么问题呢?
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'>