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