Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > is there a way to add attributes to instances?

Reply
Thread Tools

is there a way to add attributes to instances?

 
 
ako...
Guest
Posts: n/a
 
      10-07-2005
hello,

is there a way to add properties to instances and access them later
just like if they were defined in the object's class?


a.newproperty = 123
puts a.newproperty

i know how to dynamically add newproperty to the class of instance 'a',
but is there a way to do it per instance? or do i have to maintain an
explicit hash table on my objects and access these attributes through
the table?

thanks for the help
konstantin

 
Reply With Quote
 
 
 
 
James Edward Gray II
Guest
Posts: n/a
 
      10-07-2005
On Oct 6, 2005, at 9:36 PM, ako... wrote:

> hello,
>
> is there a way to add properties to instances and access them later
> just like if they were defined in the object's class?
>
>
> a.newproperty = 123
> puts a.newproperty
>
> i know how to dynamically add newproperty to the class of instance
> 'a',
> but is there a way to do it per instance? or do i have to maintain an
> explicit hash table on my objects and access these attributes through
> the table?


Here's two different ideas to get you going:

irb(main):001:0> require "ostruct"
=> true
irb(main):002:0> a = OpenStruct.new
=> <OpenStruct>
irb(main):003:0> a.new_property = 123
=> 123
irb(main):004:0> a.property
=> nil

irb(main):018:0> class Magic
irb(main):019:1> def method_missing( meth, *args, &block )
irb(main):020:2> if meth.to_s =~ /^(\w+)=$/
irb(main):021:3> instance_variable_set("@#{$1}", *args)
irb(main):022:3> elsif instance_variables.include? "@#{meth}"
irb(main):023:3> instance_variable_get("@#{meth}")
irb(main):024:3> else
irb(main):025:3* super
irb(main):026:3> end
irb(main):027:2> end
irb(main):028:1> end
=> nil
irb(main):029:0> b = Magic.new
=> #<Magic:0x1b0764>
irb(main):030:0> b.new_property = 123
=> 123
irb(main):031:0> b.new_property
=> 123

Hope that helps.

James Edward Gray II



 
Reply With Quote
 
 
 
 
James Britt
Guest
Posts: n/a
 
      10-07-2005
ako... wrote:
> hello,
>
> is there a way to add properties to instances and access them later
> just like if they were defined in the object's class?
>
>
> a.newproperty = 123
> puts a.newproperty
>
> i know how to dynamically add newproperty to the class of instance 'a',
> but is there a way to do it per instance? or do i have to maintain an
> explicit hash table on my objects and access these attributes through
> the table?


class <<a
attr_accessor :newproperty
end


James

--

http://www.ruby-doc.org - The Ruby Documentation Site
http://www.rubyxml.com - News, Articles, and Listings for Ruby & XML
http://www.rubystuff.com - The Ruby Store for Ruby Stuff
http://www.jamesbritt.com - Playing with Better Toys


 
Reply With Quote
 
Rob Rypka
Guest
Posts: n/a
 
      10-07-2005
On 10/6/05, James Edward Gray II <(E-Mail Removed)> wrote:
> On Oct 6, 2005, at 9:36 PM, ako... wrote:
> > is there a way to add properties to instances and access them later
> > just like if they were defined in the object's class?

>
> Here's two different ideas to get you going:
>
> irb(main):001:0> require "ostruct"
> =3D> true
> irb(main):002:0> a =3D OpenStruct.new
> =3D> <OpenStruct>
> irb(main):003:0> a.new_property =3D 123
> =3D> 123
> irb(main):004:0> a.property
> =3D> nil


I think OpenStruct is what you want to use. If you feel you have to
implement it yourself, or it's not quite right, think about using
method_missing. It is perhaps the most awsomely useful concepts in
Ruby.

--
Rob


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Is there any way to access attributes from an imported module? Andrew Berg Python 3 10-02-2011 08:50 AM
class attributes & data attributes james_027 Python 2 06-20-2007 03:12 PM
WebControl.Attributes.Add and custom attributes P4trykx ASP .Net 2 01-31-2007 04:33 PM
Parse reserved attributes as normal attributes Max XML 1 09-22-2006 12:04 PM
Best way to add attributes to shelved objects? Jonathon McKitrick Python 0 04-23-2004 07:39 PM



Advertisments