-
Notifications
You must be signed in to change notification settings - Fork 2.8k
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:- 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?