# File lib/facets/more/inheritor.rb, line 55
  def inheritor( key, obj, op=nil )

    # inhertiance operator
    op = op ? op.to_sym : :add

    # inheritor store a this level
    instance_variable_set("@#{key}", obj)

    #base = self
    deflambda = lambda do

      define_method( key ) do
        defined?(super) ? super.__send__(op,obj) : obj.dup
      end

      define_method( "#{key}!" ) do
        instance_variable_get("@#{key}") || inheritor( key, obj.class.new, op )
        #if instance_variables.include?("@#{key}")
        #  instance_variable_get("@#{key}")
        #else
        #  if self != base
        #    inheritor( key, obj.class.new, op )
        #  end
        #end
      end
    end

    # TODO This is an issue if you try to include a module
    # into Module or Class itself. How to fix?

    # if the object is a module (not a class or other object)
    if self == Class or self == Module
      class_eval &deflambda
    elsif is_a?(Class)
      (class << self; self; end).class_eval &deflambda
    elsif is_a?(Module)
      #class_inherit &deflambda
      extend class_extension( &deflambda )
    else # other Object
      (class << self; self; end).class_eval &deflambda
    end

    obj
  end