kotlin, вызывающий мутирующую функцию в делеризации класса

Я новичок в Котлине, я не знаю, как это объяснить, но этого примера должно быть достаточно

interface Walker{ var position:Pair<Int,Int> fun walk(to:Pair<Int,Int>){ position = to; } fun trip() } class People(override var position: Pair<Int, Int>):Walker{ override fun trip() { Log.v("TP","Ouch!!") } } class Superman(override var position: Pair<Int, Int>): Walker by People(position){ } 

когда я звоню

 val sm = Superman(Pair(0,0)) sm.walk(Pair(2,2)) Log.v("TP","${sm.position}" //It give (0,0) instead of (2,2) 

есть ли способ устранить это, все еще используя делегат

+ Изменить

 class Superman(override var position: Pair<Int, Int>): Walker by People(position) 

в

 class Superman(position: Pair<Int, Int>): Walker by People(position) 

Таким образом, вы передаете только начальное значение position делегату, а не однократно переопределяющее position , которое заменяет реализацию, которая была первоначально делегирована Person .