We don't need instances of built-in types to allow extra attributes. So, no need to say {}.__roles__ = something. What we would need is to be able to say dict.__roles__ = something.
It would be nice if the objects that represent built-in types could have attributes set on them. This would be helpful for some things in Zope 3 too.
There are important reasons why I don't want this, and in fact will go to great lengths to prevent this. Reason 1: multiple interpreters share the built-in type objects, and modifying a built-in type will affect all interpreters. Reason 2: if this were allowed, people *will* abuse it to change the behavior of built-in types to suit their purposes, and then they will be disappointed when they break standard library stuff that they don't realize they need. So better put a stop to that. --Guido van Rossum (home page: http://www.python.org/~guido/)