 <pre><code>(defclass locatable () ((zone :accessor zone :initform nil) (locator :initarg :locator :initform (error "Must supply a locator parameter for this class.") :allocation :class :accessor locator))) </code></pre> <p>The slot <code>locator</code> is shared in the class. It will be allocated somehow in the class object. The <code>DEFCLASS</code> form creates this class object. Thus the slot <code>locator</code> usually will be initialized when the class object is created and initialized. Way before the first instance of that class is created.</p> <p><strong>LispWorks Backtrace</strong></p> <pre><code>CL-USER 50 : 1 &gt; :b Call to CLOS::CLASS-REDEFINITION-LOCK-DEBUGGER-WRAPPER Call to INVOKE-DEBUGGER Call to ERROR Call to (METHOD CLOS::COMPUTE-CLASS-SLOT-CONSES (STANDARD-CLASS)) Call to (METHOD SHARED-INITIALIZE :AFTER (STANDARD-CLASS T)) ; &lt;-- Call to CLOS::ENSURE-CLASS-USING-CLASS-INTERNAL Call to (METHOD CLOS:ENSURE-CLASS-USING-CLASS (CLASS T)) Call to CLOS::ENSURE-CLASS-WITHOUT-LOD Call to LET Call to LET Call to EVAL Call to CAPI::CAPI-TOP-LEVEL-FUNCTION Call to CAPI::INTERACTIVE-PANE-TOP-LOOP Call to MP::PROCESS-SG-FUNCTION </code></pre> <p>As you see <code>SHARED-INITIALIZE</code> is called on the class object, which then initializes the shared slots.</p> <p>I also don't think calling <code>error</code> like this should be done in user code. You might find a better way to check for missing initargs.</p>