継承を利用せずに、ListとDictと互換性のあるクラスを作成したい


継承を利用せずに、（例えばListやDictのインスタンスを包含して、）  
ListとDictと互換性のあるクラスを作成したいのですが、  
実装するべきメソッド（__から始まるメソッド）を教えていただけないでしょうか？

[code]

    class SampleList():
        def __init__(self):
            self.list = [1, 2, 3]
    
        def __iter__(self):  # イテレータの実装
            return (data for data in self.list)
    
    for value in SampleList():
        print(value)
    
[/code]

さらにスライスの実装も必要  
Len()の実装も必要  
他に必要なインターフェースありますでしょうか？  
Dictクラスについてはどうでしょうか？




listやdictのメソッドの一覧を取得するのであれば、次のワンライナーで確認できると思います。

[code]

    # list
    (lambda x: print(*[s for s in dir(x) if callable(getattr(x, s))], sep='\n'))([])
    # dict
    (lambda x: print(*[s for s in dir(x) if callable(getattr(x, s))], sep='\n'))({})
    
[/code]

なお、「継承を利用せず」が「 **標準で継承されてしまうobject以外のあらゆるクラスからの** 継承を利用せず」ではなく「
**dictとlistからの**
継承を利用せず」と言う意味であれば、`collections.abc`にある抽象基底クラスを継承して、最低限必要なメソッドのみ実装し、他のメソッドはmixinによって自動定義したほうがいいでしょう。




`collections.abc`のドキュメントが参考になるはずです。

<https://docs.python.org/3/library/collections.abc.html>

組み込みクラスはこのモジュールで定義されるABCの「仮想サブクラス」である場合がある、と記載されています。実際に、`dict`は`MutableMapping`を、`list`は`MutableSequence`を仮想継承していることが確認できます。

[code]

    In [1]: from collections.abc import MutableMapping, MutableSequence
    
    In [2]: issubclass(dict, MutableMapping)
    Out[2]: True
    
    In [3]: issubclass(list, MutableSequence)
    Out[3]: True
    
[/code]

