[Python-3000] Substantial rewrite of PEP 3101
Eric V. Smith
eric+python-dev at trueblade.com
Mon Jun 4 12:37:34 CEST 2007
> Formatter Creation and Initialization
>
> The Formatter class takes a single initialization argument, 'flags':
>
> Formatter(flags=0)
>
> The 'flags' argument is used to control certain subtle behavioral
> differences in formatting that would be cumbersome to change via
> subclassing. The flags values are defined as static variables
> in the "Formatter" class:
>
> Formatter.ALLOW_LEADING_UNDERSCORES
>
> By default, leading underscores are not allowed in identifier
> lookups (getattr or getitem). Setting this flag will allow
> this.
>
> Formatter.CHECK_UNUSED_POSITIONAL
>
> If this flag is set, the any positional arguments which are
> supplied to the 'format' method but which are not used by
> the format string will cause an error.
>
> Formatter.CHECK_UNUSED_NAME
>
> If this flag is set, the any named arguments which are
> supplied to the 'format' method but which are not used by
> the format string will cause an error.
I'm not sure I'm wild about these flags which would have to be or'd
together, as opposed to discrete parameters. I realize have a single
flag field is likely more extensible, but my impression of the
standard library is a move away from bitfield flags. Perhaps that's
only in my own mind, though!
Also, why put this in the base class at all? These could all be
implemented in a derived class (or classes), which would leave the
base class state-free and therefore without a constructor.
> Formatter Methods
>
> The methods of class Formatter are as follows:
>
> -- format(format_string, *args, **kwargs)
> -- vformat(format_string, args, kwargs)
> -- get_positional(args, index)
> -- get_named(kwds, name)
> -- format_field(value, conversion)
I've started a sample implementation to test this API. For starters,
I'm writing it in pure Python, but my intention is to use the code in
the pep3101 sandbox once I have some tests written and we're happy
with the API.
More information about the Python-3000
mailing list