Wesley Brooks wrote: > Dear Users, > > I'm in the process of adding assert statements to a large piece of > code to aid with bug hunting and came across the following issue; > > Using python in a terminal window you can do the following: > >>type(False) == bool > True > > I would like to check that an object is a class, here's an example: > >>class b: > ....def __init__(self): > ........self.c = 1 > ....def d(self): > ........print self.c > >>type(b) > <type 'classobj'> > > But the following fails: > >>type(b) == classobj > Traceback (most recent call last): > File "<stdin>", line 1, in ? > NameError: name 'classobj' is not defined > > For the time being I'll use b.__name__ == b to ensure I'm getting the > right class. Is there a reason why the other types such as bool are > defined but classobj isn't?
No idea. You can easily define it yourself, though: >>> class Classic: pass ... >>> classobj = type(Classic) >>> isinstance(Classic, classobj) True Note that "newstyle" classes (those deriving from object) are of type 'type', not 'classobj': >>> class Newstyle(object): pass ... >>> isinstance(Newstyle, classobj) False >>> isinstance(Newstyle, (classobj, type)) True The inspect module wraps the functionality in a function: >>> import inspect >>> inspect.isclass(Newstyle) True >>> inspect.isclass(Classic) True Peter -- http://mail.python.org/mailman/listinfo/python-list