From: Phrogz Date: 2007-12-03T12:35:02+09:00 Subject: Re: Class Help - Accessing Parent Methods from Child On Dec 2, 6:04 pm, Michael Boutros wrote: > Hello everyone, I'm working on an API for Google Reader, and I'm having > some trouble with classes and inheritance and the like. I've got my main > class, Reader, and then two children classes, Subscription < Reader and > Item < Reader. Now, in my instance of Reader, I have two class variables > set: @headers, which are the headers that are to always be included in > the Net::HTTP call, and @connection, the Net::HTTP instance that is > connected to the Google Reader API. > > I then have a method called get_page in Reader, which takes a URL and > any custom headers, then does the call. All this works perfectly well, > when #get_page is called from Reader. However, I also want to call > get_page from Subscription and Item. However, understandably, when I > call it from Subscription, I get an error that @connection and @headers > are undefined. I don't know where to start or what to do. class Reader HEADERS = "" @@connection1 = "con1" @connection2 = "con2" class << self attr_reader :connection2 end def do_things p HEADERS p @@connection1 p self.class.connection2 end end class Subscription < Reader def do_things p HEADERS p @@connection1 p self.class.connection2 p self.class.superclass.connection2 p Reader.connection2 end end Reader.new.do_things #=> "" #=> "con1" #=> "con2" Subscription.new.do_things #=> "" #=> "con1" #=> nil #=> "con2" #=> "con2" Conclusion: If you want to access class-level information from a superclass, the simplest way is to use a constant (if the value is constant). If the value needs to change, you can use a @@class_variable (which is shared between the superclass and all its descendants) or you can explicitly find the class you're interested in.