Мне интересно, можно ли использовать Python C-API для преобразования, например. Float -> String или Bool -> Int или Int -> Bool и т. д.
Не всякое преобразование имеет смысл, например Dict -> List — трудно представить, как это будет выглядеть.
Однако большинство преобразований ДЕЙСТВИТЕЛЬНО имеют смысл.
Float -> Int would just round to the nearest integer
Float -> Bool would evaluate True non-zero
Float -> String would give a string representation (but to what precision?)
Float -> Dict probably doesn't make sense
Итак, мой вопрос: есть ли способ принудительно преобразовать эти типы с помощью C-API?
Я понимаю, что предпочтительным способом работы Python является внутренняя обработка типа. Итак, вы делаете:
x = 1 + 2.5
И он достаточно умен, чтобы знать, что Long + Float -> Float
Тем не менее, я пишу мост Python/С++, где у меня есть типы Long Float Complex Dict и т.д., и я хочу иметь возможность делать:
// initialise a Float object with an object of unknown type
Float myFloat = somePyObjectPointer;
Таким образом, инициализация его целым числом будет работать, строка «3.14» будет работать, «foo» не будет работать, Dict не будет работать и т. д.
Я хотел бы использовать механизм Python для того, «что подключается к чему», а не создавать большое количество механизмов C++, чтобы делать это вручную. Обоснование: (1) меньше С++, (2) если CPython изменит функциональность, я не хочу рассинхронизироваться.