-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Class Attribute
Some koans may ask you for the __class__ attribute of an object:
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!
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:
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:
So... that would mean that the ex2.__class__ is equal to exceptions.NameError, right?
Uh, not exactly:
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__:
So when asked for a class value by Python Koans, always give the straight class name, starting with a capital letter. Got it?





