    # File lib/core-uncommon/facets/module/class_inheritor.rb, line 45
      def class_inheritor(key, obj, op=nil, &fop)
        raise ArgumentError if op && fop

        if !fop
          op  = op ? op.to_sym : :+
          fop = lambda{ |o, x| o.__send__(op, x) }
        end

        #(class << self; self; end).module_eval do
        class_extend do

          define_method(key) do
            ancestors.reverse.inject(obj.dup) do |o, a|
              if a.respond_to?("#{key}!")
                fop.call(o, a.__send__("#{key}!"))
              else
                o
              end
            end
          end

          define_method("#{key}!") do
            if instance_variable_defined?("@#{key}")
              instance_variable_get("@#{key}")
            else
              instance_variable_set("@#{key}", obj.dup)
            end
          end

        end
      end