From: Daniel Schierbeck Date: 2005-10-24T21:37:02+09:00 Subject: Re: How to find all the subclasses of a class? This will save an array of subclasses in a class attribute named `subclasses'. It may not be the most efficient way of doing it, but it works. class Class def inherited(subclass) if superclass.respond_to? :inherited superclass.inherited(subclass) end @subclasses ||= [] @subclasses << subclass end def subclasses @subclasses end end class SuperClass; end class A < SuperClass; end class B < SuperClass; end class C < SuperClass; end class D < A; end puts SuperClass.subclasses.join(", ") # A, B, C, D If you only need one superclass, this is more efficient: class MyClass def self.inherited(subclass) if superclass.respond_to? :inherited superclass.inherited(subclass) end @subclasses ||= [] @subclasses << subclass end def self.subclasses @subclasses end end Cheers, Daniel