Polymoprhism question

Steven D'Aprano steve+comp.lang.python at pearwood.info
Fri May 24 08:10:16 EDT 2013


On Fri, 24 May 2013 04:40:22 -0700, RVic wrote:

> I'm trying to figure out (or find an example) of polymorphism whereby I
> pass a commandline argument (a string) which comports to a class (in
> java, you would say that it comports to a given interface bu I don't
> know if there is such a thing in Python) then that class of that name,
> somehow gets intantiated from that string. This way, I can have similar
> classes, but have my program use various ones by simply changing the
> commandline argument.
> 
> Can anyone show me how this might be done in Python? Thanks.


I'm not 100% sure I understand what you want, but my guess is you want 
something like this:


# A toy class.
class AClass(object):
    def __init__(self, astring):
        self.astring = astring
    def __repr__(self):
        return "%s(%r)" % (self.__class__.__name__, self.astring)

# And some variations.
class BClass(AClass):
    pass

class CClass(AClass):
    pass


# Build a dispatch table, mapping the class name to the class itself.
TABLE = {}
for cls in (AClass, BClass, CClass):
    TABLE[cls.__name__] = cls


# Get the name of the class, and an argument, from the command line.
# Or from the user. Any source of two strings will do.
# Data validation is left as an exercise.
import sys
argv = sys.argv[1:]
if not argv:
    name = raw_input("Name of the class to use? ")
    arg = raw_input("And the argument to use? ")
    argv = [name, arg]


# Instantiate.
instance = TABLE[argv[0]](argv[1])
print instance


-- 
Steven



More information about the Python-list mailing list