I was interested in the same thing, so I played with the console. Entertainment:
class Parent class << self attr_accessor :something def something(value = nil) @something = value ? value : @something end def inherited(subclass) self.instance_variables.each do |var| subclass.instance_variable_set(var, self.instance_variable_get(var)) end end end attr_accessor :something self.something = 'Parent Default' def something(value = nil) @something = value ? value : @something ? @something : self.class.something end end class Child < Parent
Results in:
Parent.something # => "Parent Default" Parent.something = "Parent something else" # => "Parent something else" Parent.something # => "Parent something else" parent = Parent.new # => #<Parent:0x007fc593474900> parent.something # => "Parent something else" parent.something = "yet something different" # => "yet something different" parent.something # => "yet something different" parent.class.something # => "Parent something else" Child.something # => "Parent Default" child = Child.new # => #<Child:0x007fc5934241f8> child.something # => "Parent Default" GrandChild.something # => "GrandChild default" GrandChild.something("grandchild something else") # => "grandchild something else" GrandChild.something # => "grandchild something else" GrandChild.superclass.something # => "Parent Default" grandchild = GrandChild.new # => #<GrandChild:0x007fc5933e70c8> grandchild.something # => "grandchild something else" grandchild.something = "whatever" # => "whatever" GrandChild.something # => "grandchild something else" grandchild.something # => "whatever"
nakwa
source share