dict をサブクラス化しないと、クラスをメソッドに渡すことができるように、クラスをマッピングと見なす必要があります**
。
from abc import ABCMeta
class uobj:
__metaclass__ = ABCMeta
uobj.register(dict)
def f(**k): return k
o = uobj()
f(**o)
# outputs: f() argument after ** must be a mapping, not uobj
少なくとも、マッピングの機能が欠落しているというエラーがスローされるまでは、実装を開始できます。
コンテナー タイプのエミュレートを確認しましたが、マジック メソッドを定義するだけでは効果がなく、それABCMeta
をオーバーライドして dict として登録すると、アサーションがサブクラスとして検証されますが、失敗しますisinstance(o, dict)
。理想的には、使用したくありませんABCMeta
。