-
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 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?