我還沒有看到字典點訪問的切換版本。可切換點訪問Python字典?
我第一遍這裏嘗試不起作用:
class DottableDict (dict):
def allowDotting (self, state=True):
if state:
self.__setattr__ = dict.__setitem__
self.__getattr__ = dict.__getitem__
else:
del self.__setattr__
del self.__getattr__
>>> import dot
>>> d = dot.DottableDict()
>>> d.allowDotting()
>>> d.foo = 'bar'
>>> d
{}
>>> d.foo
'bar'
>>> d.__dict__
{'__setattr__': <slot wrapper '__setitem__' of 'dict' objects>, 'foo': 'bar',
'__getattr__': <method '__getitem__' of 'dict' objects>}
>>> d.allowDotting(False)
>>> d.__dict__
{'foo': 'bar'}
我認爲簽名不SETATTR和setitem之間的匹配。
我第二次也似乎像它應該工作,但在相同的方式失敗:
class DottableDict (dict):
def dotGet (self, attr):
return dict.__getitem__(self, attr)
def dotSet (self, attr, value):
return dict.__setitem__(self, attr, value)
def allowDotting (self, state=True):
if state:
self.__getattr__ = self.dotGet
self.__setattr__ = self.dotSet
else:
del self.__setattr__
del self.__getattr__
你想要什麼樣的行爲? – unutbu
我有時想使用字典點訪問 - 通過instance.foo作爲實例['foo']的替代方式訪問字典派生的實例值 - 但我希望能夠在運行時打開和關閉此功能。 –