---
title: "Ruby 3.1 adds Class#subclasses"
description: "Ruby 3.1 adds Class#subclasses"
canonical_url: "https://www.bigbinary.com/blog/ruby-3-1-adds-class-subclasses"
markdown_url: "https://www.bigbinary.com/blog/ruby-3-1-adds-class-subclasses.md"
---

# Ruby 3.1 adds Class#subclasses

Ruby 3.1 adds Class#subclasses

- Author: Ashik Salman
- Published: December 27, 2021
- Categories: Ruby 3.1, Ruby

Ruby 3.1 introduces the `Class#subclasses` method, which returns all classes
directly inheriting from the receiver without including singleton classes.

We can see many implementations for calculating all subclasses of a particular
class from the Ruby community with different gems. The
[ActiveSupport::DescendantsTracker](https://api.rubyonrails.org/classes/ActiveSupport/DescendantsTracker.html#method-c-subclasses)
is one of such implementations used in Rails framework. Finally, Ruby has added
the `Class#subclasses` native implementation for it's 3.1 version release.

## After Ruby 3.1

```ruby
=> class User; end
=> class Employee < User; end
=> class Client < User; end

=> class Manager < Employee; end
=> class Developer < Employee; end

=> User.subclasses
=> [Employee, Client]

=> Employee.subclasses
=> [Manager, Developer]

=> Developer.subclasses
=> []
```

Here's the relevant [pull request](https://github.com/ruby/ruby/pull/5045) and
[feature discussion](https://bugs.ruby-lang.org/issues/18273) for this change.

## Links

- [Human page](https://www.bigbinary.com/blog/ruby-3-1-adds-class-subclasses)
