2017-01-03 2 views
1

私がやっていることは、おそらくこれを実行する最良の方法ではないと知っていますが、今は別の方法を考えることができません。サブジェクトクラスのメソッドをクラスに配置する

私は基本的に持っていることはこれです:

def __len__(self): 
    return len(self.bar) 

class foo: 
    def __init__(self): 
     self.bar = ['bundy'] 

現在、私はこのように、リスト上のメソッドの結果を返すために、私のクラスのメソッドの多くを定義しています もちろん

、また、他の方法とbarを行うにはないオブジェクトがある - 私はlist

を再発明ではないよ簡単にWAがありますメソッドをコピーして、それらをひとつずつ定義する必要はありませんか?

+0

どのリストメソッドをコピーしますか?それらのすべて? – ThisSuitIsBlackNot

+0

現在、はい、それらのすべて - 私の他のすべての方法は...ではないと思います(それはどういう意味ですか?) –

+2

'list'から継承できますか? – ThisSuitIsBlackNot

答えて

1

あなたがやっているように、いくつかのメソッドを1つずつ定義する必要があります。 しかし、リスト以外のPythonには基底クラスがあります。これは、あなたが提供しなければならないメソッドを明確に定義し、この最小セットに基づく残りのメソッドを定義します。

これは、 "abstract base classes"です。あなたが望むのは、オブジェクトを "変更可能なシーケンス"として実装することです。フルリスト機能を持たせるには、__getitem__, __setitem__, __delitem__, __len__, insertを実装するだけです。

python 3.xでは、クラスをcollections.abc.MutableSequenceから継承し、それらを実装します。 (Python 2.7では代わりにcollection.MutableSequenceです。)

これを行うと、無料の__contains__, __iter__, __reversed__, index, count, append, reverse, extend, pop, remove__iadd__の方法が得られます。

関連する問題