__str__ - это формирование текстового представления класса для вставики в лог или в дебагер, к примеру
вам просто надо проверять тип подчиненного обьекта, и если он один из из списка возможных подчиненнных классов, то у него вызывать метод toJSON() к примеру. естественно у подчиненных классов этот метод надо реализовать