辞書プロトコルを実装するクラスLabelMapper
(クラス) があります。boost::python
その辞書にアクセスするための属性を使用するプロキシ クラスが必要です。__setitem__
オーバーライドに関する多くの投稿を見てきまし__getitem__
たが、正しく理解できないようです。
self.mapper
単純なアプローチ (以下) は、呼び出しにより無限再帰につながりLabelMapperProxy.__getattr__
ますself.mapper
。
class LabelMapper(object):
def __init__(self): self.map={}
def __getitem__(self,key): return self.map[key]
def __setitem__(self,key,val): self.map[key]=val
def __delitem__(self,key): del self.map[key]
class LabelMapperProxy(object):
def __init__(self,mapper): self.mapper=mapper
def __getattr__(self,key): return self.mapper[key]
def __setattr__(self,key,val): self.mapper[key]=val
def __delattr__(self,key): del self.mapper[key]
lm=LabelMapper()
lm['foo']=123
# construct the proxy
lmp=LabelMapperProxy(mapper=lm)
print lmp.foo # !!! recursion
lmp.bar=456
print lmp.bar,lm['bar']
解決策は何ですか?おそらく、標準ライブラリで事前に調理されたそのようなプロキシはありますか?