On Thu, Mar 8, 2012 at 8:22 AM, Ethan Furman <et...@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__ > dict_proxy({ > '__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 "<stdin>", line 1, in <module> > TypeError: unorderable types: int() < str()
So what conclusion do you draw? -- --Guido van Rossum (python.org/~guido) _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com