Class-name—a non-nil symbol.
Superclass-name—a non-nil symbol.
Slot-name—a symbol. The slot-name argument is a symbol that is syntactically valid for use as a variable name.
Reader-function-name—a non-nil symbol. :reader can be supplied more than once for a given slot.
Writer-function-name—a generic function name. :writer can be supplied more than once for a given slot.
Reader-function-name—a non-nil symbol. :accessor can be supplied more than once for a given slot.
Allocation-type—(member :instance :class). :allocation can be supplied once at most for a given slot.
Initarg-name—a symbol. :initarg can be supplied more than once for a given slot.
Form—a form. :init-form can be supplied once at most for a given slot.
Type-specifier—a type specifier. :type can be supplied once at most for a given slot.
Class-option— refers to the class as a whole or to all class slots.
Initarg-list—a list of alternating initialization argument names and default initial value forms. :default-initargs can be supplied at most once.
Class-name—a non-nil symbol. :metaclass can be supplied once at most.
new-class—the new class object.
defclass defines a new named class. It returns
the new class object as its result.
The syntax of
defclass provides options for specifying
initialization arguments for slots, for specifying default
initialization values for slots, and for requesting that
methods on specified generic functions be automatically
generated for reading and writing the values of slots.
No reader or writer functions are defined by default;
their generation must be explicitly requested. However,
slots can always be accessed using
Defining a new class also causes a type of the same name to be
defined. The predicate
(typep object class-name
true if the class of the given object is
the class named by class-name itself or
a subclass of the class class-name. A class object
can be used as a type specifier.
(typep object class
) returns true
if the class of the object is
class itself or a subclass of class.
The class-name argument specifies the proper name
of the new class.
If a class with the same proper name already exists
and that class is an instance of
and if the
defclass form for the definition of the new class
specifies a class of class
the existing class is redefined,
and instances of it (and its subclasses) are updated
to the new definition at the time that they are next accessed.
For details, see Section 4.3.6 (Redefining Classes).
Each superclass-name argument
specifies a direct superclass of the new class.
If the superclass list is empty, then the superclass
defaults depending on the metaclass,
standard-object being the
The new class will inherit slots and methods from each of its direct superclasses, from their direct superclasses, and so on. For a discussion of how slots and methods are inherited, see Section 4.3.4 (Inheritance).
The following slot options are available:
)to be used with
setfto modify the value of the slot.
defclassform. The value of the slot is shared by all instances of the class. If a class C1 defines such a shared slot, any subclass C2 of C1 will share this single slot unless the
defclassform for C2 specifies a slot of the same name or there is a superclass of C2 that precedes C1 in the class precedence list of C2 and that defines a slot of the same name.
defclassform was evaluated. Note that the lexical environment refers both to variables and to functions. For local slots, the dynamic environment is the dynamic environment in which
make-instanceis called; for shared slots, the dynamic environment is the dynamic environment in which the
defclassform was evaluated. See Section 7.1 (Object Creation and Initialization).
No implementation is permitted to extend the syntax of
) as an abbreviation for
initialize-instance, the value will be stored into the given slot, and the slot's :initform slot option, if any, is not evaluated. If none of the initialization arguments specified for a given slot has a value, the slot is initialized according to the :initform slot option, if specified.
Each class option is an option that refers to the class as a whole. The following class options are available:
make-instance, the corresponding default initial value form is evaluated, and the initialization argument name and the form's value are added to the end of the initialization argument list before the instance is created; see Section 7.1 (Object Creation and Initialization). The default initial value form is evaluated each time it is used. The lexical environment in which this form is evaluated is the lexical environment in which the
defclassform was evaluated. The dynamic environment is the dynamic environment in which
make-instancewas called. If an initialization argument name appears more than once in a :default-initargs class option, an error is signaled.
Note the following rules of
defclass for standard classes:
defclassform for that class is evaluated.
The object system can be extended to cover situations where these rules are not obeyed.
Some slot options are inherited by a class from its superclasses, and some can be shadowed or altered by providing a local slot description. No class options except :default-initargs are inherited. For a detailed description of how slots and slot options are inherited, see Section 7.5.3 (Inheritance of Slots and Slot Options).
The options to
defclass can be extended. It is required that
all implementations signal an error if they observe a class option or
a slot option that is not implemented locally.
It is valid to specify more than one reader, writer, accessor, or initialization argument for a slot. No other slot option can appear more than once in a single slot description, or an error is signaled.
If no reader, writer, or accessor is specified for a slot,
the slot can only be accessed by the function
defclass form appears as a top level form,
the compiler must make the class name be recognized as a
valid type name in subsequent declarations (as for
and be recognized as a valid class name for
parameter specializers and for use as the :metaclass option of a
defclass. The compiler must make
the class definition
available to be returned by
find-class when its environment
argument is a value received as the environment parameter of a macro.
If there are any duplicate slot names,
an error of type
program-error is signaled.
If an initialization argument name appears more than once in
:default-initargs class option,
an error of type
program-error is signaled.
If any of the following slot options appears more than once in a
single slot description, an error of type
is signaled: :allocation,
:initform, :type, :documentation.
It is required that all implementations signal
an error of type
program-error if they observe a class option
or a slot option that is not implemented locally.
documentation, initialize-instance (Standard Generic Function), make-instance, slot-value, Section 4.3 (Classes), Section 4.3.4 (Inheritance), Section 4.3.6 (Redefining Classes), Section 4.3.5 (Determining the Class Precedence List), Section 7.1 (Object Creation and Initialization)