このソリューションを実装することになったコンテキストを説明するのは簡単ではないため、これは非常に不自然な例です。ただし、この特定の特異性が発生する理由を誰かが答えることができれば、私は感謝します.
例:
class A(dict):
def __init__(self):
self['a'] = 'success'
def __getitem__(self, name):
print 'getitem'
return dict.__getitem__(name)
class B(object):
def __init__(self):
self._a = A()
setattr(self, '__getitem__', self._a.__getitem__)
b = B()
c = b['a']
これは以下を出力します:
c = b['a']
TypeError: 'B' object is unsubscriptable
これを行うのは奇妙な方法ですが (明らかにサブクラス化する方がより論理的です)、明示的に設定したメソッドが見つからないのはなぜですか?
私がこれを行う場合:
dir(b)
私はこれを得る:
['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', '_a']
などの他の方法でも同じ問題が発生し__iter__
ます。機能するこのメソッドを明示的に定義することについてはどうですか?