Eric V. Smith wrote:
> > Formatter.ALLOW_LEADING_UNDERSCORES
> > Formatter.CHECK_UNUSED_POSITIONAL
> > Formatter.CHECK_UNUSED_NAME
> 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.
I think the dict/defaultdict cooperative implementation based on the
__missing__ method is a good guide to follow here. Instead of having
flags to the constructor, instead define methods that the base class
invokes to deal with the relevant checks - subclasses can then override
them as they see fit.
A couple of possible method signatures:
def allowed_name(self, name):
"Return True if name is allowed, False otherwise"
# default implementation return False if name starts with '_'
def allow_unused(self, unused_args, unused_kwds):
"Return True if unused args/names are allowed, False otherwise"
# default implementation always returns True
Subclasses can then either return False to get a standard 'disallowed'
exception, or else raise their own exception explicitly.
A few common alternate implementations of the latter method would be:
def allow_unused(self, unused_args, unused_kwds):
# All positional arguments must be used
return not unused_args
def allow_unused(self, unused_args, unused_kwds):
# All keyword arguments must be used
return not unused_kwds
def allow_unused(self, unused_args, unused_kwds):
# All arguments must be used
return not unused_args and not unused_kwds
Cheers,
Nick.
--
Nick Coghlan | [EMAIL PROTECTED] | Brisbane, Australia
---------------------------------------------------------------
http://www.boredomandlaziness.org
_______________________________________________
Python-3000 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe:
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com