As you wrote this, you need to define Fooand Barabove Parent, as it Parentrefers to other classes.
Edit: you just need to move these class references to a method:
class Parent(object):
def do(self,string):
name2class = {'foo' : Foo, 'bar' : Bar }
return name2class[string]()
class Foo(Parent):
pass
class Bar(Parent):
pass
if __name__ == '__main__':
parent = Parent()
instance = parent.do('foo')
Edit2: Here is your factory version:
class Parent(object):
pass
class Foo(Parent):
pass
class Bar(Parent):
pass
class ParentFactory(object):
def __init__(self):
self.name2class = {'foo' : Foo, 'bar' : Bar}
def create(self, string):
return self.name2class[string]()
if __name__ == '__main__':
factory = ParentFactory()
instance = factory.create('foo')
source
share