Ethan Furman wrote:
Greetings List!
I'm writing a wrapper to the datetime.date module to support having no 
date.  Its intended use is to hold a date value from a dbf file, which 
can be empty.
The class is functional at this point, but there is one thing I would 
like to change -- datetime.date.max and datetime.date.min are class 
attributes of datetime.date, and hold datetime.date values.  At this 
point I have to have two lines outside the actual class definition to do 
the same thing, e.g.:
<trimmed down class code>
  class NullDate(object):
      "adds null capable DateTime.Date constructs"
      __slots__ = ['_date']
      def __new__(cls, date='', month=0, day=0):
          nulldate = object.__new__(cls)
          nulldate._date = ""
          .
        .
        .
        return nulldate
      def __getattr__(self, name):
          if self:
              attribute = self._date.__getattribute__(name)
              return attribute
          else:
              if callable(dt.date.__dict__[name]):
                  return int
              else:
                  return 0
      def __nonzero__(self):
          if self._date:
              return True
          return False
      @classmethod
      def fromordinal(cls, number):
          if number:
              return cls(dt.date.fromordinal(number))
          else:
              return cls()
  NullDate.max = NullDate(dt.date.max)
  NullDate.min = NullDate(dt.date.min)
</trimmed down class code>

How can I move those last two lines into the class definition so that:
  1) they are class attributes (not instance), and
  2) they are NullDate type objects?

~ethan~
I resisted posting a similar question recently. After much 
consideration, I realized that the inability to reference a class inside 
its own definition must have been a deliberate design of the language. 
So the short answer is you can't.
The way you have done it is best--its not a hack and is good style.

James
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to