[Tutor] how to create a generic instance of an object?

Kent Johnson kent37 at tds.net
Wed Sep 7 05:24:12 CEST 2005


John Burk wrote:
> I've got a base class "Asset", and currently have about 20 sub-classes
> (assetTypes) that will inherit from it, with more to follow, I'm sure.
> All of the assetTypes will have the same methods, but they'll be
> polymorphic; each assetType's methodA() will do something slightly
> different from it's sibling assetTypes.
> 
> What I want to do is to pass in the assetType at runTime via an external
> script, create a new instance of it, and then run that instance's
> methods.  That way I won't have to have 20 or more " if assetType== "
> if/elif statements, and maintaining the script that creates new
> instances won't become a nightmare.
> 
> I've tried something like this:
> 
> <asset.py>
> class Asset: pass
> 
> <foo.py>
> class Foo(Asset): pass
> 
> <script.py>
> from asset import Asset
> from foo import Foo
> 
> klass = 'Foo'
> o = klass()
> 
> which gets me 'string not callable', which is kind of expected.

Try 
  klass = globals()['Foo']
  o = klass()

Alternately you could import all the Asset classes into a module with

<assets.py>
from asset import Asset
from foo import Foo
etc

then in your main script use
import assets
klass = getattr(assets, 'Foo')
o = klass()

Then the main script doesn't need to know any of the details of which asset types are defined.

Kent



More information about the Tutor mailing list