proxy1.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. class DataBinding:
  2. _inner_ = []
  3. def __init__(self, data):
  4. _bindings_ = {}
  5. self._inner_.append(_bindings_)
  6. self._inner_.append(data)
  7. # self._inner_[0] = _bindings
  8. # self._inner_[1] = data
  9. def __getattr__(self, name):
  10. data = self._inner_[1]
  11. return data[name]
  12. def __setattr__(self, name, value):
  13. _bindings_ = self._inner_[0]
  14. if name in _bindings_:
  15. bindings = _bindings_[name]
  16. for binding in bindings:
  17. element = binding['element']
  18. attr = binding['attr']
  19. _name = attr.replace("-", "_")
  20. funcName = "set_%s" % _name
  21. if hasattr(element, funcName):
  22. element.func = getattr(element, funcName)
  23. element.func(value)
  24. else:
  25. if hasattr(element, "obj") and element.obj:
  26. setattr(element.obj, _name, value)
  27. def set_binding_value(self, element, attr, key):
  28. _bindings_ = self._inner_[0]
  29. if key not in _bindings_:
  30. _bindings_[key] = []
  31. _bindings_[key].append({
  32. "element": element,
  33. "attr": attr
  34. })
  35. _data = {
  36. 'a': 10,
  37. 'b': 100
  38. }
  39. data = DataBinding(_data)
  40. class Binding:
  41. def set_value(self, value):
  42. print('set value =', value)
  43. binding = Binding()
  44. data.set_binding_value(binding, 'value', 'a')
  45. data.a = 20