factory design pattern in python