Q: How do you tell if a given class is an ordinary class or a singleton class?
A: Test whether the class is the first element in its own ancestor list.
class NotASingleton self == ancestors.first # => true end class << Object.new self == ancestors.first # => false end
As you can see, ordinary classes have themselves as first ancestor. Singleton classes do not have themselves as an ancestor.