Hey.
So I got this "data" class that contains a dictionary with functions that modify it's contents. And I have 2 widgets that I want to update whenever the data is changed. The data can be changed from "widget1" or from an outside call (somewhere else)
But whenever it's changed (red arrows), i need to call the widgets to update and display the new data (blue arrows).
So I tried to make this "data" class a singleton:
def __new__(cls):
if not hasattr(cls, "instance"):
cls.instance = super(MyDataClass, cls).__new__(cls)
print(cls.instance)
return cls.instance
(which does seem to work as the print statement returns the same address twice)
<MyDataClass object at 0x00000243882A25E0>
<MyDataClass object at 0x00000243882A25E0>
and then each widget can add it's separate callback in a list:
def addCallbackFunction(self, f):
self.callbacks.append(f)
def _callCallbackFunctions(self):
for f in self.callbacks:
f()
But when I make the second instance, the list of callbacks (self.callbacks) is empty. And only showing the 2nd callback.
EDIT: To clarify what I'm doing in the widgets:
class Widget1():
def __init__():
self.data = MyDataClass()
self.data.addCallbackFunction(self.callback1)
def callback1():
print("x")
class Widget2():
def __init__():
self.data = MyDataClass()
self.data.addCallbackFunction(self.callback2)
def callback2():
print("y")
My expectation is that self.callbacks from "data" class contains callback1 and callback2... but it seems to only contain callback2 twice...
<bound method callback2 object at 0x000001AC8E98D970>>
<bound method callback2 object at 0x000001AC8E98D970>>
What am i missing? Or is there a better way of doing this whole thing? :)
Thanks.