(defclass mc (standard-class) ((foo :initarg :foo :accessor foo :initform 'some-default))) (defmethod sb-mop:validate-superclass ((class mc) (superclass standard-object)) t) (defmethod shared-initialize ((o mc) slots &rest args) (apply #'call-next-method o slots (let ((foo (getf args :foo))) (etypecase foo (null args) ((cons symbol null) (list* :foo (first foo) args)))))) (defclass example-with-foo () () (:metaclass mc) (:foo meow)) (defclass example-without-foo () () (:metaclass mc)) (print (list (foo (find-class 'example-with-foo)) (foo (find-class 'example-without-foo)))) (defclass bad () () (:metaclass mc) (:foo bar baz)) ; should signal an error