如何将字典的引用设置为类属性的一部分,即使它的值已更新?
live = {'APPL': {'bid': 41, 'ask': 43}}
extras = {'name': 'apple', 'country': 'us', 'currency': 'usd'}
class myClass:
def __init__(self, live_data, extra_data):
self.__dict__ = live_data
self.__dict__.update(extra_data)
def update(self, extra_data):
self.__dict__.update(extra_data)
symbol = myClass(live['APPL'], extras)
如果变量' live'更新完毕,一切顺利 如果变量' extras'更新后,实例属性将丢失它的引用。
更新dict数据......
live['APPL']['bid'] = 40
live['APPL'].update({'ask': 44})
extras['country'] = 'uk'
extras.update({'currency': 'gbp'})
实例'符号'没有正确更新
In: symbol.bid
Out: 40
In: symbol.ask
Out: 44
In: symbol.country
Out: 'us'
In: symbol.currency
Out: 'usd'
如何保持对新数据到达后不断更新其值的字典的属性引用?
答案 0 :(得分:0)
不是修改self.__dict__
,而是定义__getattr__()
方法:
class myClass:
def __init__(self, live_data, extra_data):
self._live = live_data
self._extra = extra_data
def __getattr__(self, name):
if name in self._extra:
return self._extra[name]
elif name in self._live:
return self._live[name]
else:
raise AttributeError("No attribute: {}".format(name)