Skip to content
Greg Malcolm edited this page May 6, 2013 · 16 revisions

Inspecting the Class Type

Some koans may ask you for the __class__ attribute of an object:

AssertionError: '-=> FILL ME IN! <=-' != <type 'str'>

What does __class__ attribute do? It tells you what the class type is for a given object (on the left hand side of the period). Let's look at that for a string object:

To the Python Console (IDLE) robin! And run this: "batman".__class__

!["batman".class] (http://i442.photobucket.com/albums/qq150/gregmalcolm/ScreenShot2013-05-02at75509AM.png)

Notice it returns this: <type 'str'>

Which is the same thing we're seeing from the koans runner:

AssertionError: '-=> FILL ME IN! <=-' != <type 'str'>

So "batman" == <type 'str'> then right?

Not exactly...

!["batman" == <type 'str'>] (http://i442.photobucket.com/albums/qq150/gregmalcolm/ScreenShot2013-05-02at80309AM.png)

"batman".__class__ is DISPLAYED as <type 'str'>, but the value is actually the class name. Which is just str. NO QUOTES!

"batman" == str

Class Types With Namespaces

Some classes are more confusing to inspect using class. For example when inspecting Exception classes. To demonstrate we need to capture an exception object from the python console:

catching an exception

We now have the exception object stashed away in the ex2 variable. so which part of that is the class type name? We can inspect it with the __class__ attribute:

ex2.class

So... that would mean that the ex2.__class__ is equal to exceptions.NameError, right?

Uh, not exactly:

ex2.class != exceptions.NameError

We don't actually access exceptions through the module name. We refer to the class directly. So you get a more accurate view of what the __class__ value really by querying the name using __name__:

ex2.class == NameError

So when asked for a class value by Python Koans, always give the straight class name, starting with a capital letter. Got it?

Clone this wiki locally