Something confusing about Ruby: Object and Class
In Ruby, everything is an object, every object has a class, and all classes inherit from
Object. Three very simple statements.
Here’s where it gets complicated:
Classes are objects
If a class is an object, then it has to have a class. That class is
Class. Here’s an example
class Example; end #an empty class Example.class # => Class
Class is a class, what is its class?
Class.class #=> Class
Ok, fine. What is
Object.class #=> Class
No surprises there.
So far we’ve seen that
Object are all instances of the
Class class. That’s one part of OO – objects are instances of classes. In Ruby, where everything is an object, then even classes are instances of classes. And the the class of a class is
The other part of OO is inheritance. Classes inherit from other classes. I’ve already stated that everything inherits from
Object (either directly or indirectly). Let’s test that:
Example.superclass # => Object Object.superclass # => nil (it's not turtles all the way down) Class.superclass # => Module Module.superclass # => Object
So, every class inherits from
Object except for
Object, which doesn’t inherit from anything.
Where does this lead then? Well, have a gander:
Object.instance_of? Class # => true Class.is_a? Object # => true
Object is an “instance” of
Class “is” an
Ruby really does take this “everything is an object” thing seriously. Wow. And my brain hurts.