-
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__
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".__class__ == <type 'str'>
then right?
Not exactly...
"batman".__class__
is DISPLAYED as <type 'str'>
, but the value is actually the class name. Which is just str. NO QUOTES!
Note: These examples show Python 2 output. Python 3 output will look a little different.
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:
The thing is, when used in comparison __class__
isn't interested in which module a class lives in. It just looks at the actual class name. You get a more honest view of what the __class__
value really by chaining it to __name__
forcing it to display a briefer version:
Note: That result is surrounded by quotes. so __class__
is not actually equal to __class__.__name__
.
So when asked for a __class__
value by Python Koans, always give the straight class name or type. No periods period. Got it?