[Python-Dev] Classes that claim to be defined in __builtin__ but aren't

James Y Knight foom at fuhm.net
Tue Aug 10 00:14:12 CEST 2004


There's a fair number of classes that claim they are defined in 
__builtin__, but do not actually appear there. For example:

 >>> def qual(clazz):
...     return clazz.__module__ + '.' + clazz.__name__
...
 >>> qual(types.GeneratorType)
'__builtin__.generator'
 >>> qual(types.FunctionType)
'__builtin__.function'
 >>> qual(types.MethodType)
'__builtin__.instancemethod'
 >>> qual(types.NoneType)
'__builtin__.NoneType'
 >>> qual(types.GeneratorType)
'__builtin__.generator'
 >>> __builtin__.generator
AttributeError: 'module' object has no attribute 'generator'
[[[etc.]]]

IMO classes ought to actually appear in __builtin__ if they claim they 
are defined there. Doing otherwise breaks reflection, as you have to 
add a special case for these class names to use the appropriate object 
from the types module instead. Thoughts? If it isn't desirable to have 
these names appear in __builtin__, perhaps their '__module__' should be 
changed to another module where they are defined?

James


More information about the Python-Dev mailing list