私は現在、 MarkPilgrimによるDiveInto Pythonを読んでおり、継承に関するセクションに進んでいます。セクション5.5で、Pilgrimは、ラッパークラスUserDictからの継承と組み込みのdict型からの継承の違いについて説明しています。
なぜ誰かがラッパークラスを気にするのか理解するのに苦労しています...UserDictラッパークラス(または他のUserXxxクラス)から継承することの利点は何ですか?
ご意見をいただければ幸いです。ありがとう!
私は現在、 MarkPilgrimによるDiveInto Pythonを読んでおり、継承に関するセクションに進んでいます。セクション5.5で、Pilgrimは、ラッパークラスUserDictからの継承と組み込みのdict型からの継承の違いについて説明しています。
なぜ誰かがラッパークラスを気にするのか理解するのに苦労しています...UserDictラッパークラス(または他のUserXxxクラス)から継承することの利点は何ですか?
ご意見をいただければ幸いです。ありがとう!
あなたが正しい:
このクラスの必要性は、dictから直接サブクラス化する機能(Pythonバージョン2.2以降で利用可能になった機能)によって大幅に置き換えられました。dictが導入される前は、UserDictクラスを使用して、既存のメソッドをオーバーライドしたり、新しいメソッドを追加したりすることで新しい動作を取得する辞書のようなサブクラスを作成していました。
最初の文に注意してください。これは、UserDictのドキュメントに基づいています。
ああ、Python3ではそれはなくなった。
ラッパークラスは、しばらくの間それほど有用ではなかったため、Python3から削除されました。ミックスインクラスUserDict.DictMixin
はまったく別の話です。その便利な機能は、モジュール(Python2.6および3.*)の「抽象基本クラス」全体にありますcollections
。
リンク先のページで、答えに関するヒントを見つけました。
2.2より前のバージョンのPythonでは、文字列、リスト、辞書などの組み込みデータ型を直接サブクラス化することはできませんでした。これを補うために、Pythonには、これらの組み込みデータ型(UserString、UserList、およびUserDict)の動作を模倣するラッパークラスが付属しています。UserDictクラスは、通常のメソッドと特別なメソッドの組み合わせを使用して、辞書の優れた模倣を行います。Python 2.2以降では、dictなどの組み込みデータ型から直接クラスを継承できます。
実際には、今日では、UserDictではなくdictをサブクラス化することをお勧めします。