The describe() method would return a human-readable description of the object, summarizing type, label, component members, parameter values (including range, mean, etc if these are heterogeneous).
The idea behind this is to make it easier to spot bugs in your (and PyNN's) code, to spot obvious differences between what you think you've built and what has actually been built.
The syntax I have in mind is something along the lines of:
describe(self, template=default_template, renderer=default_renderer)
where renderer should be an object with a render(data, template) method. [describe() calls render() with the provided template and a data dict, and returns the string returned by render()].
This will give the flexibility to easily tune the output (level of verbosity, format (plain text, HTML, XML, JSON)) without having to modify the describe() method itself.