7

このコードの何が問題になっていますか?

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

MyListたとえば、 withのインスタンスを作成し、MyList([1, 2, 3])このインスタンスを出力すると、得られるのは空のリストだけ[]です。MyDictがサブクラス化されている場合、それ自体listではありませんか?MyDictlist

注意: Python 2.x と 3.x の両方で。

4

2 に答える 2

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'>
于 2013-01-23T16:42:01.533 に答える
0

私は自分でそれを理解しました:selfのサブクラスのインスタンスであるlistため、まだMyListオブジェクトであるリストにキャストすることはできません。

于 2013-01-23T16:44:31.720 に答える