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