Finding the super class of an object?


#1

How can I find out what the super class is of an object, Say if a class
extends Hash. I need to be able to find a string representation of the
super class (‘Hash’)… is_a? won’t work as that requires an actual
module or class… I need a string representation.

any ideas? thanks…


#2

Hi –

On Tue, 16 Jan 2007, Aaron S. wrote:

How can I find out what the super class is of an object, Say if a class
extends Hash. I need to be able to find a string representation of the
super class (‘Hash’)… is_a? won’t work as that requires an actual
module or class…

is_a? won’t report an inheritance relationship in any case:

class D < C; end
D.is_a?© # false (unless C is Object maybe…)

I need a string representation.

any ideas? thanks…

superclass.name will give it to you as a string.

David


#3

yes, is_a? does report inheritance. consider this…

class C
end

class D < C
end

t = D.new

puts t.is_a?©

thanks.


#4

do you know of anyway to do this on an instance of an object, not on the
class method??

thanks…


#5

nevermind, got it…

t.class.superclass.name


#6

Aaron S. wrote:

How can I find out what the super class is of an object, Say if a class
extends Hash. I need to be able to find a string representation of the
super class (‘Hash’)… is_a? won’t work as that requires an actual
module or class… I need a string representation.

any ideas? thanks.

Will Module#ancestors work?

irb(main):001:0> class A
irb(main):002:1> end
=> nil
irb(main):003:0> class B < A
irb(main):004:1> end
=> nil
irb(main):005:0> A.ancestors
=> [A, Object, Kernel]
irb(main):006:0> B.ancestors
=> [B, A, Object, Kernel]

-Justin


#7

irb(main):013:0> a=10
=> 10
irb(main):014:0> a.class.ancestors
=> [Fixnum, Integer, Precision, Numeric, Comparable, Object, Kernel]
irb(main):015:0> a.class.superclass.name
=> “Integer”
irb(main):016:0>


#8

Hi –

On Tue, 16 Jan 2007, aaron smith wrote:

module or class…

class D < C
end

t = D.new

puts t.is_a?©

I interpreted your question as meaning that, given a class, you wanted
a string representation of its superclass – and my point was that
is_a? isn’t relevant in that situation, because D.is_a?© is false.
(It’s actually not relevant anyway, since it’s a boolean query; it
returns true or false, which isn’t what you’re looking for.)

If you want to go from any object to its class’s superclass in string
form, you would do:

obj.class.superclass.name

David