__new__ and dynamic inheriting

Discussion in 'Python' started by Riccardo Galli, Jun 15, 2005.

  1. Hi all.
    It's easier if I show an example first.

    Say I have

    class A(object):
    def speak(self): print 'A!'

    class B(object):
    def speak(self): print 'B!'

    I also have a factory function like this.

    def foo(kind,*args,**kwds):
    if kind=='a': return A(*args,**kwds)
    else: return B(*args,**kwds)

    I need foo to be a class, so that I could inherit from it and still use it
    as a factory, so that I can do:

    Foo('a').speak()
    Foo('b'.speak()

    class Final(Foo):
    def __init__(self,kind,*args,**kwds):
    super(Foo,self).__init__(kind,*args,*kwds)

    Can I do it? How ?
    If it is possible, I'm pretty sure it involves using __new__ on Foo, but I
    can't figure out how to make it works.

    Any help is appreciated.

    Thank you,
    Riccardo
     
    Riccardo Galli, Jun 15, 2005
    #1
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.