Monostate (Borg)
class Monostate(object): _shared_state = {} def __new__(cls, *a, **kw): obj = super(Monostate, cls).__new__(*a, **kw) obj.__dict__ = _shared_state return obj class Foo(Monostate) pass class Bar(Foo) pass f = Foo() b = Bar()
Better than singleton, data overriding to the rescue: But what if two calls to the constructor provide different initial data?