I have several classes that inherit from a single class. Each child class creates some data structures then the parent class performs operations on that data.
Question: How do I get the parent class to use that data regardless of whether the object is instantiated or not.
class A
  def self.static_test
    puts @myvar + "_static"
  end
  def instantiated_test
    puts @myvar + "_instantiated"
  end
end
class B<A
  @myvar = "this works B"
end
class C<A
  @myvar = "this works C"
end
B.static_test
B.new.instantiated_test
C.static_test
C.new.instantiated_test
B.static_test
B.new.instantiated_test
I would need the above code to print:
this works B_static this works B_instantiated this works C_static this works C_instantiated this works B_static this works B_instantiated
I am using Ruby 1.8.7.
Edit: It looks like my original question was a bit confusing. I need both static and instantiated methods to use the s开发者_Go百科ame data. The methods won't be doing the same thing though. I updated the sample code to reflect this.
def instantiated_test
  self.class.static_test
end
BTW, if you are sure that inherited classes will have a certain structure, extract it to parent class. If you are not sure, don't use it at all from parent class. Parent's implementation should not depend on child's implementation.
class A
  class << self
    attr_reader :myvar
  end
  # Alternatively:
  # def self.myvar; @myvar; end
  def self.static_test
    puts myvar
  end
  def instantiated_test
    puts self.class.myvar
  end
end
class B<A
  @myvar = "this works B"
end
class C<A
  @myvar = "this works C"
end
B.static_test
#=> this works B
B.new.instantiated_test
#=> this works B
C.static_test
#=>this works C
C.new.instantiated_test
#=>this works C
B.static_test
#=> this works B
B.new.instantiated_test
#=> this works B
class A
  def self.static_test
    puts @myvar
  end
  def instantiated_test
    puts @myvar
  end
end
class B<A
  @myvar = "this works B"
  @@myvar = @myvar
  def initialize
    @myvar = @@myvar
  end
end
class C<A
  @myvar = "this works C"
  @@myvar = @myvar
  def initialize
    @myvar = @@myvar
  end
end
But this is ugly and requires duplication.
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论