Overriding methods per object in Nim can happen, sometimes I've seen this sort of handmade vtablish thing: import sugar, strformat type Nimterface = object m: proc(x:int):string{.nimcall.} proc call(o: Nimterface,x:int):string = o.m(x) let obj1 = Nimterface(m:(x:int)=> &"one:{x}") let obj2 = Nimterface(m:(x:int)=> &"two:{2*x}") echo obj1.call(5) echo obj2.call(7) Run
That's a bit prototype ish