Use of factory pattern in Python?

Gabriel Genellina gagsl-py at yahoo.com.ar
Thu Dec 7 03:47:35 EST 2006


At Thursday 7/12/2006 05:28, Nathan Harmston wrote:

>chr1 SGD gene 5 8 id=1 name=3 dbref=6
>chr1 SGD intron 5 6 id=5 notes="spam"
>chr1 SGD exon 7 8 id=5
>
>so I was thinking of having a factory class to return the individual
>objects for each row......ie
>
>class Factory():
>         # if passed a gene return a gene object
>         # if passed an intron return an intron object
>         # if passed an exom return an exon object
>
>Is this a good way of doing this, or is there a better way to do this
>in Python, this is probably the way I d do it in Java.

The basic idea is the same, but instead of a long series of 
if...elif...else you can use a central registry (a dictionary will 
do) and dispatch on the name. Classes act as their own factories.

registry = {}

class Base(object):
     kind = "Unknown"
register(Base)

class Gene(Base):
     kind = "gene"
     def __init__(self, *args, **kw): pass
register(Gene)

class Intron(Base):
     kind = "intron"
     def __init__(self, *args, **kw): pass
register(Intron)

def register(cls):
     registry[cls.kind] = cls

def factory(kind, *args, **kw):
     return registry[kind](*args, **kw)

If some arguments are always present, you can name them, you're not 
limited to use the generic *args and **kw.


-- 
Gabriel Genellina
Softlab SRL 

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis! 
¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar



More information about the Python-list mailing list