# Naming ruby class attribute and methods

**URL:** <https://www.ruby-forum.com/t/naming-ruby-class-attribute-and-methods/131887>\
**Category:** Ruby\
**Created:** [March 14, 2008, 4:20am UTC](https://www.ruby-forum.com/t/naming-ruby-class-attribute-and-methods/131887 "2008-03-14T04:20:46Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![dsoftware](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/82dd89/32.png) [@dsoftware](https://www.ruby-forum.com/u/dsoftware)\
**Post date:** [March 14, 2008, 4:20am UTC](https://www.ruby-forum.com/t/naming-ruby-class-attribute-and-methods/131887/1 "2008-03-14T04:20:46Z")

</div>

Hello,

Is there a way to name all the methods and attributes/ class  
instantiated  
variables that have been created? For example, from the class below, I  
would like to get all the variables instantiated from the initialize and  
example methods, and then I would also like to be able to get the method  
names.

#pseudo code, not sure if it really runs  
class Foo  
def initialize()  
@thestring = ‘’  
@haha = “HA HA HAA!”  
@var = “I am a variable”  
end  
def example(arg)  
@arg = arg  
@thestring = “#{@haha} #{@var}: #{arg}”  
end  
def thestring  
@thestring  
end  
end

So is there a way to extract [“thestring”, “var”, “haha”, “arg”] for the  
variable names and then [“initialize”, “example”, “thestring”] for the  
method names. I can see how I would do it with regular expressions and  
ruby2ruby, but I was wondering if there was another way of extracting  
the  
information. Thanks in advance.

---

<div class="post-metadata">

**Author:** ![dsoftware](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/82dd89/32.png) [@dsoftware](https://www.ruby-forum.com/u/dsoftware)\
**Post date:** [March 14, 2008, 4:28am UTC](https://www.ruby-forum.com/t/naming-ruby-class-attribute-and-methods/131887/2 "2008-03-14T04:28:23Z")

</div>

Hi –

On Fri, 14 Mar 2008, Demonic S. wrote:

> class Foo  
> @thestring  
> end  
> end
> 
> So is there a way to extract [“thestring”, “var”, “haha”, “arg”] for the  
> variable names and then [“initialize”, “example”, “thestring”] for the  
> method names. I can see how I would do it with regular expressions and  
> ruby2ruby, but I was wondering if there was another way of extracting the  
> information. Thanks in advance.

You can get method and instance variable names. An “attribute” is  
really a kind of virtual construct, composed of methods and (usually)  
instance variables, so it doesn’t appear as a separate thing when you  
do introspective stuff on the object. The main time “attribute” exists  
is when you create them; after that, they’re just methods (though one  
is of course free to continue to call them attributes).

Foo.instance\_methods(false) will give you all the instance methods  
defined in Foo. (The rather cryptic “false” means: don’t include  
methods created higher in the ancestry.) To get the instance variables  
you have to instantiate the class, run the methods that create them,  
and then call the #instance\_variables method. (Just defining methods  
with i. vars inside them doesn’t create the i. vars.)

David

---

<div class="post-metadata">

**Author:** ![dsoftware](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/82dd89/32.png) [@dsoftware](https://www.ruby-forum.com/u/dsoftware)\
**Post date:** [March 14, 2008, 4:40am UTC](https://www.ruby-forum.com/t/naming-ruby-class-attribute-and-methods/131887/3 "2008-03-14T04:40:43Z")

</div>

Thanks David.  
Is there any way to get the methods on an object that is already  
instantiated?

Thanks again

---

<div class="post-metadata">

**Author:** ![dsoftware](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/82dd89/32.png) [@dsoftware](https://www.ruby-forum.com/u/dsoftware)\
**Post date:** [March 14, 2008, 4:44am UTC](https://www.ruby-forum.com/t/naming-ruby-class-attribute-and-methods/131887/4 "2008-03-14T04:44:49Z")

</div>

Hi –

On Fri, 14 Mar 2008, Demonic S. wrote:

> Thanks David.  
> Is there any way to get the methods on an object that is already  
> instantiated?

Yes: object.methods

David

---

<div class="post-metadata">

**Author:** ![dsoftware](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/82dd89/32.png) [@dsoftware](https://www.ruby-forum.com/u/dsoftware)\
**Post date:** [March 14, 2008, 5:24am UTC](https://www.ruby-forum.com/t/naming-ruby-class-attribute-and-methods/131887/5 "2008-03-14T05:24:41Z")

</div>

On Thu, Mar 13, 2008 at 10:39 PM, Demonic S.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > Hi –
> > 
> > > names.  
> > > @arg = arg  
> > > method names. I can see how I would do it with regular expressions and
> > 
> > –  
> > Upcoming Rails training from David A. Black and Ruby Power and Light:  
> > ADVANCING WITH RAILS, April 14-17 2008, New York City  
> > CORE RAILS, June 24-27 2008, London (Skills Matter)  
> > See [http://www.rubypal.com](http://www.rubypal.com) for details. Berlin dates coming soon!

f = Foo.new  
f.public\_methods(false)

… works for the instance f

Todd

---

<div class="post-metadata">

**Author:** ![dsoftware](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/82dd89/32.png) [@dsoftware](https://www.ruby-forum.com/u/dsoftware)\
**Post date:** [March 14, 2008, 5:47pm UTC](https://www.ruby-forum.com/t/naming-ruby-class-attribute-and-methods/131887/6 "2008-03-14T17:47:22Z")

</div>

On Mar 13, 11:27 pm, “David A. Black” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > example methods, and then I would also like to be able to get the method  
> > @arg = arg  
> > ruby2ruby, but I was wondering if there was another way of extracting the  
> > defined in Foo. (The rather cryptic “false” means: don’t include  
> > methods created higher in the ancestry.) To get the instance variables  
> > you have to instantiate the class, run the methods that create them,  
> > and then call the #instance\_variables method. (Just defining methods  
> > with i. vars inside them doesn’t create the i. vars.)

Kind of funny. I was just thinking about this before I sat down and  
read this thread.

Ruby’s use of the term “attribute” is rather a misnomer. I would think  
it much better if “attributes” referred to instance variables. Those  
are the things that give state to objects. Attributes on the other  
hand would be better off referred to as “accessors”.

T.
