# Derived-class initialization

**URL:** <https://www.ruby-forum.com/t/derived-class-initialization/163240>\
**Category:** Ruby\
**Created:** [March 18, 2009, 3:27pm UTC](https://www.ruby-forum.com/t/derived-class-initialization/163240 "2009-03-18T15:27:47Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![roxah](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/54ee81/32.png) [@roxah](https://www.ruby-forum.com/u/roxah)\
**Post date:** [March 18, 2009, 3:27pm UTC](https://www.ruby-forum.com/t/derived-class-initialization/163240/1 "2009-03-18T15:27:47Z")

</div>

Hello all,

I’m having some trouble with extending an existing Ruby class in order  
to add functionality. Here’s some example code:

class Graph  
…  
…  
def subgraph(\*args)  
graph = self.new  
…  
…  
return graph  
end  
end

class AwesomeGraph \< Graph  
…  
…  
def do\_something  
…  
…  
end  
end

g = AwesomeGraph.new  
a = g.subgraph(g.nodes)  
a.do\_something // ERROR! No Graph#do\_something exists!

I was hoping ‘self.new’ would take into account the derived class used  
upon creation, but it doesn’t.

Any suggestions?

–  
Thanks!  
Bryan

---

<div class="post-metadata">

**Author:** ![roxah](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/54ee81/32.png) [@roxah](https://www.ruby-forum.com/u/roxah)\
**Post date:** [March 18, 2009, 3:36pm UTC](https://www.ruby-forum.com/t/derived-class-initialization/163240/2 "2009-03-18T15:36:37Z")

</div>

2009/3/18 Bryan R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> …  
> …  
> return graph  
> end  
> end

This looks suspect, ‘self’ in this method looks like it will refer to  
the  
Graph instance, not the Graph class. Try self.class.new instead.

---

<div class="post-metadata">

**Author:** ![roxah](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/54ee81/32.png) [@roxah](https://www.ruby-forum.com/u/roxah)\
**Post date:** [March 18, 2009, 3:50pm UTC](https://www.ruby-forum.com/t/derived-class-initialization/163240/3 "2009-03-18T15:50:23Z")

</div>

Yep… that worked. 🙂

–  
Thanks!  
Bryan

James C. wrote:

> 2009/3/18 Bryan R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
> 
> > …  
> > …  
> > return graph  
> > end  
> > end
> 
> This looks suspect, ‘self’ in this method looks like it will refer to  
> the  
> Graph instance, not the Graph class. Try self.class.new instead.
