John Salerno wrote: > Shane Hathaway wrote: > >> Don't forget to file a bug. > > I'm reluctant to call it a bug just yet. Here's more stuff below. > There's obviously a difference between old- and new-style classes. It > seems that as far as new-style is concerned, __name__ is an attribute of > __class__ (along with a bunch of other stuff), but not of Foo itself.
I'm not sure what you're saying. The class of a class is the 'type' builtin, unless metaclasses are involved. So your expression "dir(Foo.__class__)" is equivalent to "dir(type)", and the 'type' builtin happens to have a __name__ attribute that dir() notices. Take a look: >>> class Foo(object): ... pass ... >>> Foo.__class__ is type True >>> Foo.__name__ 'Foo' >>> Foo.__class__.__name__ 'type' The bug is that the expression "dir(someclass)", where the class is a user-defined class of either new or old style, never reveals to the user that the class object has a __name__ attribute. I tested this with Python versions 2.3 through 2.5b1. This is an education issue; since that important attribute is not in the list, newcomers are not likely to discover it, and may instead use strange incantations to get the name of a class. Do you want me to file the bug? Shane -- http://mail.python.org/mailman/listinfo/python-list