Guido van Rossum wrote:
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?
That other changes (that have definitely been for the better) are making
the 'feature' of non-string keys in namespace dicts less and less
friendly. Rather than letting it slowly fall into complete shambles we
should go ahead and deprecate, then remove, that functionality.
Because namespace dicts already have tacit approval to not support
non-string keys, it doesn't make much sense to spend developer resources
on fixing dir and whatever other functions exist that deal with
namespace dicts and assume string-only keys.
~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