From: David G. <go...@py...> - 2006-04-13 00:56:36
|
[David Goodger] > If we want to use inheritance for the option specs, let's use > inheritance. We could set up a set of classes for individual option > specs, and include them in directive classes. I worked up a proof of > concept, attached. Run it as a script to see the result. I have reworked the proof of concept to make options simpler and easier; attached. Instead of using super() calls, it uses the option spec class's __mro__ method to manually determine the superclasses and calls their setup() methods in reverse MRO order. This definitely makes option spec inheritance easier to implement by factoring out the bookkeeping. I also removed the BunchDict/StructDict technique, which although cool, is deep black magic and unnecessary. I tried the autosuper metaclass mechanism described in the descrintro_, but it didn't help enough to be useful. It reduced ``super(OptionB, self).__init__()`` calls to ``self.__super.__init__()``, but these calls were still needed, and they still had to be after the assignments to work. Class-private names were necessary for this to work, which means that we'd have had to ensure that all OptionSpec subclasses had unique names. Not worth it. .. _descrintro: http://www.python.org/download/releases/2.2.3/descrintro/#metaclasses -- David Goodger <http://python.net/~goodger> |