Cheer Xiao added the comment:

There is a bigger problem:

>>> class C:
...     class D:
...         pass
...
>>> repr(C)
"<class '__main__.C'>"
>>> repr(C.D)
"<class '__main__.D'>"

Default repr on nested classes produce specious results.

The problem become pratical when you have two nested classes C1.D and C2.D in 
module m, which end up being both "m.D" in exception traceback. 

Classes nested in function are likely to contain some information from the 
function arguments and are thus different on each function call, making it 
impossible to have a general way to name them. Thus I propose embedding the 
resulting class's `id` in __name__, like what i'm doing manually in a hulking 
way:

>>> def factory(foo):
...     class C(object):
...         bar = foo
...     func_name = 'factory'
...     C.__name__ = '%s generated classobj at 0x%x' % (func_name, id(C))
...     return C
...
>>> factory(0)
<class '__main__.factory generated classobj at 0x32273c0'>
>>> factory(0)
<class '__main__.factory generated classobj at 0x32245b0'>

Please consider reopening this issue.

----------
nosy: +xiaq

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue633930>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to