Talin wrote: > (Think of a music scoring program, which > displays various kinds of Midi events in a piano roll view, a drum > machine view, a text view, or a music notation view.)
There is another way of handling things like this, using a technique known as "double dispatching". For example the PianoRollView class would send each of the midi event objects a display_on_piano_roll request, and the DrumMachineView class would send display_on_drum_score, etc. This technique does tend to be difficult to extend, however, since all the midi objects need to know about all the possible display options. > perhaps what is needed is a way to test only those capabilities. For > example, instead of "isSequence" we could have "isIndexable", > "isIterable", and so on. You can do something like that already using hasattr(x, '__getitem__') etc. Which is all that these functions could really do, anyway. So it would just be a matter of whether it's worth having a nicer way of spelling them. > Another possibility is to have a special, empty base class that > signals "this object is a sequence". Or you could just have an is_sequence class attribute that is set on classes wanting to proclaim themselves to be sequences. I do this sort of thing a lot in the Pyrex compiler, and it seems to work well there. Of course I'm the person both defining and using the interfaces -- it might not be so good in the wider world. -- Greg _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com