Dec-03-2018, 12:48 AM
Just want class object instance to update all children. Every time object value changes.
Linking class object instance attributes to class.
Can it be done any easier than this.
Linking class object instance attributes to class.
Can it be done any easier than this.
class Point: def __init__(self, x, y): self.x = x self.y = y def set(self, x, y): self.x = x self.y = y def __repr__(self): return str(vars(self)) class Dimension: def __init__(self, w, h): self.w = w self.h = h def set(self, w, y): self.w = w self.h = h def __repr__(self): return str(vars(self)) def dir_trim(item): return [d for d in dir(item) if not d.startswith('__')] class LinkProperty: def __init__(self, attr): self.attr = attr def __set__(self, instance, value): setattr(instance.read_value, self.attr, value) instance.callback() def __get__(self, instance, owner): return getattr(instance.read_value, self.attr) def link_variable(value, callback): class LinkVariable: def __init__(self, value, callback): self.read_value = value self.callback = callback def __call__(self, value=None): if value is None: return self.read_value self.read_value = value self.callback() def clear(self): self.read_value = None self.callback() items = dir_trim(value) for item in items: setattr(LinkVariable, item, LinkProperty(item)) return LinkVariable(value, callback) def callback(): print('Callback') a = link_variable(Point(2,3), callback) b = link_variable(Dimension(1,4), callback) print(dir_trim(a)) print(dir_trim(b)) print(a.read_value, b.read_value) a.x = 7 print(a.read_value, b.read_value) print(a.x, a.y, b.w, b.h)