At Friday 27/10/2006 11:40, Aahz wrote:

>    GLOBAL = object()
>
>    def insert_ids(ids=GLOBAL):
>        if ids is GLOBAL:
>            ids = get_global_ids()

The one disadvantage of this approach is that it complicates pickling
if/when you store the stentinel in an instance.  There are ways of
working around that, but none are pleasant.

But why should you store the sentinel in an instance? It's only purpose is to detect a special case in the parameter, when None is not appropiate. Even if you were assigning instance attributes, you can use the sentinel as a default class attribute (which are not pickled).

>>> GLOBAL = object()
>>> class A(object):
...     x = GLOBAL
...     def __init__(self, x=GLOBAL):
...         if x is not GLOBAL:
...             self.x = x
...
>>> a = A(1)
>>> a.x
1
>>> vars(a)
{'x': 1}
>>> b = A()
>>> b.x
<object object at 0x00B8B438>
>>> vars(b)
{}
>>>
>>> from cPickle import loads,dumps
>>> s=dumps(b)
>>> b2=loads(s)
>>> b2.x
<object object at 0x00B8B438>
>>> vars(b2)
{}



--
Gabriel Genellina
Softlab SRL
__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis! ¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to