А как исправить выражения? Написать self.write(lchild)? Но код тогда будет работать?
Вы всё время спрашиваете, будет ли код работать. Понятие «работающий код» является вредным для программиста. Полезное понятие — «корректный код». Корректный код — код, удовлетворяющий спецификации. Говоря простым языком, спецификация программы описывает, как результат зависит от аргумента программы, не вдаваясь в детали реализации.
Об этом вам говорит
Xaositect.
Я бы сказал, что надо решить, что именно должен делать метод Tree.write и какие аргументы он должен принимать.
Дайте спецификацию метода «write». Как его результат должен зависеть от аргумента, то есть дерева? Как он изменяет дерево и изменяет ли вообще? Название «write» намекает, что метод записывает что-то, наверное, в дерево. Но я не вижу в коде, что метод записывает что-то, зато вижу, что он суммирует. Он должен вычислить сумму чего-то? Чего? Почему бы не назвать его «sum»?
Это не придирки, а просто дружеский совет. Учитесь описывать словами спецификацию программы, и тогда вы будете не задавать вопросы на форуме, а консультировать других людей
. Без этого вы будете программировать методом тыка, то есть случайно (ну, «интуитивно») менять программу и смотреть, «работает» ли она. Во-первых, такой метод программирования неэффективен. Во-вторых, так получается плохой программный код.