In Kombination mit TracePoint ist es möglich, für Ruby einen after_inherited Hook selbst zu bauen.

def self.after_inherited(&block)
  trace_end = TracePoint.trace(:end) do |tp|
    block.call
    tp.disable
  end
end

Mit #disable können wir die gesetzten TracePoints wieder deaktivieren, um mehrfache Aufrufe bei multiplen Vererbungen zu vermeiden.

Einsetzen lässt sich dies wiederum im inherited callback:

def self.inherited(subclass)
  after_inherited do
    puts subclass.name
  end
end