[RFC] use optparse for option handling

Ben Finney bignose+hates-spam at benfinney.id.au
Fri Jul 14 00:30:10 BST 2006


Aaron Bentley <aaron.bentley at utoronto.ca> writes:

> Ben Finney wrote:
> > If you really want to check *identity*, use 'is' and 'is
> > not'.
> 
> I really want to check identity.  I want to be able to use
> OptionParser.DEFAULT_VALUE as a special object, the same way None is
> used.

If that's truly the best way to implement the functionality, then
you'll need an object that *does* behave like None. Search for the
Singleton pattern.

However, that's a bad design smell, and doesn't quite seem to address
what you're actually looking for.

> I want the test to evaluate to True if v is another object with the
> same value as OptionParser.DEFAULT_VALUE.  It should only evaluate
> to False if v and OptionParser.DEFAULT_VALUE are two names for the
> same object.

Why not put that functionality in the object that holds that value,
and make it cognizant of whether the value is changed?

    class Foo(object):
        """ Hold a value and be aware of whether it's been changed. """

        def __init__(self):
            self._bar = "Bar default"
            self._bar_modified = False

        def _get_bar(self):
            return self._bar

        def _set_bar(self, value):
            self._bar_modified = True
            self._bar = value

        bar = property(_get_bar, _set_bar)

        def is_bar_modified(self):
            return self._bar_modified

    >>> this_foo = Foo()
    >>> this_foo.is_bar_modified()
    False
    >>> this_foo.bar = "Ethel"
    >>> this_foo.is_bar_modified()
    True
    >>> this_foo.bar = "Bar default"
    >>> this_foo.is_bar_modified()
    True

-- 
 \      "People always ask me, 'Where were you when Kennedy was shot?' |
  `\                     Well, I don't have an alibi."  -- Emo Philips |
_o__)                                                                  |
Ben Finney





More information about the bazaar mailing list