私はPythonでdict
のようなクラスを作ろうとしています。クラスのdict()をオーバーライド
クラスを作成するときに、Pythonに組み込みクラスの作成方法を伝える特定のメソッドがあります。たとえば、__int__
メソッドをオーバーライドすると、ユーザーがクラスのインスタンスでint()
を使用した場合に返される内容がPythonに伝えられます。 __float__
と同じです。 __iter__
メソッド(Pythonがクラスのlist
とtuple
を作るのを助けることができる)をオーバーライドすることによって、Pythonがクラスの反復可能なオブジェクトを作る方法を制御することさえできます。私の質問は、カスタムクラスのdict
を作る方法をPythonにどのように教えてくれるのですか?特別な__dict__
メソッドはありません。どうすればそれをやりますか?私は次のような何かをしたい:
class Foo():
def __dict__(self):
return {
'this': 'is',
'a': 'dict'
}
foo = Foo()
dict(foo) # would return {'this': 'is', 'a': 'dict'}
私はdict
からクラスを継承することを試みたが、それはdict
とtype
を継承しようとしているので、サブクラスの後のコードでエラーが発生しますので、dict
ISNから継承します可能性はない。それを行う他の方法はありますか? (あなたがdict
にiter()
を使用するときに返されるものを)dict_keyiterator
オブジェクトを返すように
また、私はすでに__iter__
メソッドをオーバーライドしてきましたが、まだどのようにそれが必要動作するようには思えません。
あなたはcollections.abc 'から継承みました* Mapping'はまだ? –
'collections.abc.Mapping'は' ABCMeta'のクラスです。私のコードの多くはすでに 'type'メタクラスの上に構築されているので、' ABCMeta'と互換性がありません。私はすべてのコードをABCMetaで動作するように変更しようとしましたが、 'マッピング 'のような抽象クラスに頼らない簡単な方法があると思っていました。 – ChristianFigueroa
クラスに '@ staticmethod'を追加するだけです。たとえば、' to_dict'のように名前を付けます。これは明示的に辞書を作るために呼び出すことができます。すなわち 'result = foo_obj.to_dict()'です。 – martineau