Chris McDonough wrote:
Off the top of my head, another way to think of this *might* be to say that the 'dict access' is basically looking up a *named* utility providing a very generic marker interface, e.g. zope.component.interfaces.IUtility or even just zope.interface.Interface. That way reg['foo'] == getUtility(IUtility, name='foo'). Obviously, assignment would register in the same way.
I'm not sure it's "better", though. :)
That would also be fine, and it would normalize things a bit, although the implementation would be harder and it would result in slower lookups. But if it made folks feel better than inheriting from dict, I'd be +1 on it.
Meh, I just remembered that I tried this. The current implementation requires that the "name" value be a literal string object (or at least something convertable to Unicode). I think we could relax this requirement; it really only needs to be hashable. I wouldn't want to deploy the API if the keys were required to only be strings. - C