このコードの何が問題になっていますか?
class MyList(list):
def __init__(self, li): self = li
MyList
たとえば、 withのインスタンスを作成し、MyList([1, 2, 3])
このインスタンスを出力すると、得られるのは空のリストだけ[]
です。MyDict
がサブクラス化されている場合、それ自体list
ではありませんか?MyDict
list
注意: Python 2.x と 3.x の両方で。
このコードの何が問題になっていますか?
class MyList(list):
def __init__(self, li): self = li
MyList
たとえば、 withのインスタンスを作成し、MyList([1, 2, 3])
このインスタンスを出力すると、得られるのは空のリストだけ[]
です。MyDict
がサブクラス化されている場合、それ自体list
ではありませんか?MyDict
list
注意: Python 2.x と 3.x の両方で。
リスト初期化子を呼び出す必要があります。
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'>
私は自分でそれを理解しました:self
のサブクラスのインスタンスであるlist
ため、まだMyList
オブジェクトであるリストにキャストすることはできません。