クラス定義内の let-束縛はオブジェクトが生成される前に評価されます。しかし、式をオブジェクトが生成された直後に評価することも可能です。そのような式は、初期化子と呼ばれる匿名の隠されたメソッドとして表現されます。このため、自分自身とインスタンス変数を参照することができます。
#
class printable_point x_init = let origin = (x_init / 10) * 10 in object (self) val mutable x = origin method get_x = x method move d = x <- x + d method print = print_int self get_x initializer print_string "new point at "; self print; print_newline() end;;
class printable_point : int -> object val mutable x : int method get_x : int method move : int -> unit method print : unit end
#
let p = new printable_point 17;;
new point at 10 val p : printable_point = <obj>
初期化子は継承の際に上書きされず、すべて評価されます。初期化子もオブジェクトがある一定の性質をみたすようにするのに便利です。他の例が 5.1 節に挙げられています。