exception Opnotsupported;;
class ['test2] test1 =
object (self)
val mutable test2_ = ([] : 'test2 list)
method add_test2 t =
if test2_ = [] then test2_ <- t::test2_
else raise Opnotsupported
method get = (List.hd test2_)#get
end;;

class test2 t1 =
object (self)
val str = "test2desu"
val test1_ = t1
initializer test1_#add_test2 self
method get () = str
method print () = print_string (test1_#get ())
end;;

let t1 = new test1 in let t2 = new test2 t1 in t2#print ();;

私は上記のようにしたのですが、test2のインスタンスは1つしか持たないのにリストとして保持しています。
あまり綺麗ではないので、もっと良い方法は無いものでしょうか。