It's essential that !TracObjects could be created with minimal cost,
for easily accessing all the basic functionality expected from a Trac object
(`shortname()`, `href()`, `wiki_to_*()` and all the xref facilities).
But at the sub-class level, the Trac object generally needs
to be filled with some data from the db in order to be useful.
The first goal (''"cheap" Trac object'') is achieved by using
either the `TracObject.factory()` or the sub-class constructor
''without'' specifying the `id` of the object.
The `id` is specified after the fact by using `TracObject.setid()`.
By the way, the factory itself rely on that mechanism.
The second goal (''"complete" Trac object'') is achieved by
giving the `id` parameter to the sub-class constructor,
or by calling `TracObject.reload()` on a "cheap" !TracObject.