patron singleton

Xin xinxic en gmail.com
Vie Sep 7 08:28:41 CEST 2007


Quizà otro ejemplo te ayude un poco.
Este añade la propiedad XXX a partir de las funciones _get_XXX o 
_set_XXX
http://www.python.org/download/releases/2.2.3/descrintro/

Por cierto sabeis si se puede indicar más de una metaclasse?
  __metaclass__ = autoprop, singleton

class autoprop(type):
     def __init__(cls, name, bases, dict):
         super(autoprop, cls).__init__(name, bases, dict)
         props = {}
         for name in dict.keys():
             if name.startswith("_get_") or name.startswith("_set_"):
                 props[name[5:]] = 1
         for name in props.keys():
             fget = getattr(cls, "_get_%s" % name, None)
             fset = getattr(cls, "_set_%s" % name, None)
             setattr(cls, name, property(fget, fset))

class InvertedX:
     __metaclass__ = autoprop
     def _get_x(self):
         return -self.__x
     def _set_x(self, x):
         self.__x = -x

a = InvertedX()
assert not hasattr(a, "x")
a.x = 12
assert a.x == 12
assert a._InvertedX__x == -12



Más información sobre la lista de distribución Python-es