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()

~Ethan~
_______________________________________________
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

Reply via email to