нет никакой динамики.
автор интерпретируемого языка не захотел/не смог сделать механизм который бы позволял описать очевидное типа конструктор класса N отдает внезапно обьект класса N.
только потом набежали неграмотные школьники и подумали опа, если я буду тут патчить обьект лишним полем это не обяжет меня патчить его везде, это не баг а фича
а потом выросло поколение "я же знаю что за обьект я отдаю здесь, я же не дурак чтобы понадписывать, иди читай доки/исходники"