引用dict作为类属性

时间:2016-04-06 00:50:05

标签: python class dictionary reference attributes

如何将字典的引用设置为类属性的一部分,即使它的值已更新?

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'

如何保持对新数据到达后不断更新其值的字典的属性引用?

1 个答案:

答案 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)