add abstract factory at python