learn to use __new__ to implement singleton dp