Jon Ribbens wrote:
> > Robert Brewer <[EMAIL PROTECTED]> wrote:
> > > One solution that just occurred to me -- and that
> > > skirts the issue of choosing an interpretation --
> > > is that, when comparing date and datetime objects,
> > > the datetime's .date() method is called and the
> > > result of that call is compared to the original
> > > date.
> > +1
> > 
> > ...and it's a decision that can be made independently
> > of how to add or subtract dates.
> 
> I don't like it. It sounds suspiciously like "when
> comparing integers and floats, discard the non-integer
> portion of the float and then compare as integers".

...which can happen quite often, depending on your domain's requirements for 
significant digits. Integers and floats are numbers, not units, so a more 
proper analogy would have been, "it sounds like when comparing feet and inches, 
divide inches by 12 and discard any remainder." Which, again, can happen quite 
often.

But even feet and inches aren't a good analogy, because people don't say, 
"six-foot-three is six feet". But they *do* say, "is it Thursday right now?" 
quite often, and expect a yes-or-no answer, not "cannot compute". A slightly 
better analogy would be armies and platoons: when you compare armies (on almost 
any scale except size), you can't say an army is more or less than a platoon in 
that same army. The platoon is (part of) the army and the army is (made of) the 
platoons. So order is important only at a given level of granularity:

  Army1 = [P1, P2, P3]
  Army2 = [Px, Py, Pz]
  sorted([Army1, Army2, P1, P2, P3, Px, Py, Pz])
  [Army1, P1, P2, P3,     Px, Py, Army2, Pz]

...that is, it doesn't matter where Army2 appears, as long as it's in the 
second half of the list. Note that the platoons can still be ordered relative 
to other platoons in the same army.

Likewise, when comparing dates to date-times (but not when adding them), the 
mental model of dates and times acts more like nested sets than continuous 
functions:

  Date1 = Datetimes(1, 2, 3)
  Date2 = Datetimes(x, y, z)
  sorted([Date1, Date2, ...])
  [Date1, T1, T2, T3,     Tx, Ty, Date2, Tz]

...and the above can be achieved by:

    class nested_datetime(datetime):
        def __cmp__(self, other):
            if isinstance(other, datetime):
                return datetime.__cmp__(self, other)
            elif isinstance(other, date):
                return cmp(self.date(), other)
            raise TypeError


Robert Brewer
System Architect
Amor Ministries
[EMAIL PROTECTED]
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to