[Python-Dev] Non-string keys in type dict (original) (raw)

Guido van Rossum guido at python.org
Thu Mar 8 18:06:41 CET 2012


On Thu, Mar 8, 2012 at 8:22 AM, Ethan Furman <ethan at stoneleaf.us> wrote:

Guido van Rossum wrote:

On Wed, Mar 7, 2012 at 11:43 PM, Ethan Furman wrote:

Are you able to modify classes after class creation in Python 3? Without using a metaclass? Yes, by assignment to attributes. The dict is a read-only proxy, but attribute assignment is allowed. (This is because the "new" type system introduced in Python 2.2 needs to track changes to the dict; it does this by tracking setattr/delattr calls, because dict doesn't have a way to trigger a hook on changes.) Poorly phrased question -- I meant is it possible to add non-string-name attributes to classes after class creation.  During class creation we can do this: --> class Test: ...   ns = vars() ...   ns[42] = 'green eggs' ...   del ns ... --> Test <class '_main_.Test'> --> Test.dict dictproxy({  'module': 'main',  42: 'green eggs',  'doc': None,  'dict': <attribute '_dict_' of 'Test' objects>,  'weakref': <attribute '_weakref_' of 'Test' objects>,  'locals': {  42: 'green eggs', 'module': 'main', 'locals': {...}}  }) --> Test.dict[42] 'green eggs' A little more experimentation shows that not all is well, however: --> dir(Test) Traceback (most recent call last):  File "", line 1, in TypeError: unorderable types: int() < str()

So what conclusion do you draw?

-- --Guido van Rossum (python.org/~guido)



More information about the Python-Dev mailing list