Here's a post that's pretty fresh that seems to be the direction to take.
Here's a first stab at it that works!!! It's a simplified version of what was in that post.
It's pretty messy. I'm guessing at what the author is getting at though. His code only needs to be implemented in the root class?
WaterBlock_singleton = None
def __call__(cls, *args, **kwargs):
return cls.__new__(cls, *args, **kwargs)
def __new__(cls, *args, **kargs):
if not WaterBlock_singleton:
obj = object.__new__(cls)
WaterBlock_singleton = obj
self.vu = BlockVu(self, 'Water Block.png')