[Python-Dev] decimal.py signals & traps

Raymond Hettinger python at rcn.com
Mon Jul 12 05:11:57 CEST 2004


> Raymond writes:
> > I would like change the Context constructor API to [...]
> > (list only the flags and traps that you want set).

[Jim]
> I assume there will still be a reasonable way to say both

Yes.


> "Keep the context just as it is, but turn *off* flag/trap X"
> "Keep the context just as it is, but turn *on* flag/trap X"


After simplifying the constructor and altering the representation to
match, there was no longer much of a need to try to hide the dictionary
with a bunch of methods.  Since everyone already knows how to use a
dictionary, the API is easier to learn without method access to traps
and flags:


>>> c = Context(prec=7, traps=[DivisionByZero, Overflow])
>>> c
Context(prec=7, rounding=ROUND_HALF_EVEN, Emin=-999999999,
Emax=999999999, capitals=1, flags=[], traps=[DivisionByZero, Overflow])
>>> c.traps[Overflow] = 0
>>> c
Context(prec=7, rounding=ROUND_HALF_EVEN, Emin=-999999999,
Emax=999999999, capitals=1, flags=[], traps=[DivisionByZero])


As a nice side benefit, eval(repr(c)) now works too.

Privatizing the dictionary can still be done but I don't think it is
worth adding more methods and slowing everything down with an additional
layer of indirection.



Raymond



More information about the Python-Dev mailing list