By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,345 Members | 1,783 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,345 IT Pros & Developers. It's quick & easy.

type classobj not defined?

P: n/a
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?

I'm running the following version of python:

Python 2.4.3 (#1, Jun 13 2006, 11:46:08)
[GCC 4.1.1 20060525 (Red Hat 4.1.1-1)] on linux2

Cheers,

Wesley Brooks
Jan 3 '07 #1
Share this Question
Share on Google+
3 Replies


P: n/a
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
Jan 3 '07 #2

P: n/a
Wesley Brooks schrieb:
>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?
In general, only those types which you also use as constructors are
builtin. I.e. you would write bool(foo) (where foo is a variable),
but you would not write classobj("bar") (to create a class named
"bar"). That you can also use it for a type test is a side-effect.

Some more types are available in the types module. In this case,
you can use types. In this case, types.ClassType would do the trick.

Regards,
Martin
Jan 3 '07 #3

P: n/a
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
You can compare it against the ClassType object located in the types module.
import types
class b:
.....def __init__(self):
.........self.c = 1
.....def d(self):
.........print self.c
type(b) == types.ClassType
True

--
Denis Kasak
Jan 3 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.