Re: Instance factory - am I doing this right?

2010-03-04 Thread eb303
On Mar 3, 6:41 pm, Laszlo Nagy  wrote:
> This is just an interesting code pattern that I have recently used:
>
> class CacheStorage(object):
>     """Generic cache storage class."""
>     @classmethod
>     def get_factory(cls,*args,**kwargs):
>         """Create factory for a given set of cache storage creation
> parameters."""
>         class CacheStorageFactory(cls):
>             _construct_args = args
>             _construct_kwargs = kwargs
>             def __init__(self):
>                 cls.__init__(self,
>                     *self._construct_args,**self._construct_kwargs)
>         return CacheStorageFactory
>
> Then, I can create subclasses like:
>
> class GdbmCacheStorage(CacheStorage):
>     """Gdbm cache storage class.
>
>     @param basedir: Base directory where gdbm files should be stored.
>     @param basename: Base name for logging and creating gdbm files.
>     """
>     def __init__(self,basedir,basename):
>           . blablabla place initialization code here
>
> class MemoryCacheStorage(CacheStorage):
>     """In-Memory cache storage class.
>
>     Please note that keys and values are always mashal-ed.
>     E.g. when you cache an object, it makes a deep copy.
>     """
>     def __init__(self):
>           . blablabla place initialization code here
>
> And the finally, I can create a factory that can create cache storage
> instances for storing data in gdbm in a given directory:
>
> cache_factory = GdbmCacheStorage.get_factory("~gandalf/db","test")
> print cache_factory # 
> print cache_factory()
>
> OR I can create a factory that can create instances for storing data in
> memory:
>
> cache_factory = MemoryCacheStorage.get_factory()
> print cache_factory # 
> print cache_factory() # <__main__.CacheStorageFactory object at 0x8250c6c>
>
> Now, here is my question. Am I right in doing this? Or are there better
> language tools to be used in Python for the same thing? This whole thing
> about creating factories looks a bit odd for me. Is it Pythonic enough?
>
> Thanks,
>
>    Laszlo

Seems you try to reinvent functools:

class GdbmCacheStorage(object):
  def __init__(self,basedir,basename):
...
cache_factory = functools.partial(GdbmCacheStorage, "~gandalf/db",
"test")
print cache_factory()

Is it what you're after? I didn't see the point in creating a "cached
factory" for MemoryCacheStorage though, since it has no constructor
parameters to cache anyway. So doing 'cache_factory =
MemoryCacheStorage' in your example would do exactly the same thing as
what you did.

HTH
 - Eric -
-- 
http://mail.python.org/mailman/listinfo/python-list


Instance factory - am I doing this right?

2010-03-03 Thread Laszlo Nagy

This is just an interesting code pattern that I have recently used:

class CacheStorage(object):
   """Generic cache storage class."""
   @classmethod
   def get_factory(cls,*args,**kwargs):
   """Create factory for a given set of cache storage creation 
parameters."""

   class CacheStorageFactory(cls):
   _construct_args = args
   _construct_kwargs = kwargs
   def __init__(self):
   cls.__init__(self,
   *self._construct_args,**self._construct_kwargs)
   return CacheStorageFactory

Then, I can create subclasses like:

class GdbmCacheStorage(CacheStorage):
   """Gdbm cache storage class.
  
   @param basedir: Base directory where gdbm files should be stored.

   @param basename: Base name for logging and creating gdbm files.
   """
   def __init__(self,basedir,basename):
 . blablabla place initialization code here

class MemoryCacheStorage(CacheStorage):
   """In-Memory cache storage class.
  
   Please note that keys and values are always mashal-ed.

   E.g. when you cache an object, it makes a deep copy.
   """
   def __init__(self):
 . blablabla place initialization code here


And the finally, I can create a factory that can create cache storage 
instances for storing data in gdbm in a given directory:


cache_factory = GdbmCacheStorage.get_factory("~gandalf/db","test")
print cache_factory # 
print cache_factory()

OR I can create a factory that can create instances for storing data in 
memory:



cache_factory = MemoryCacheStorage.get_factory()
print cache_factory # 
print cache_factory() # <__main__.CacheStorageFactory object at 0x8250c6c>


Now, here is my question. Am I right in doing this? Or are there better 
language tools to be used in Python for the same thing? This whole thing 
about creating factories looks a bit odd for me. Is it Pythonic enough?


Thanks,

  Laszlo

--
http://mail.python.org/mailman/listinfo/python-list