Я понимаю, что эти методы предназначены для травления / расщепления и не имеют отношения к встроенной функции уменьшения, но в чем разница между двумя и зачем нам оба?
Документы говорят, что
Если предусмотрено, во время травления __reduce__() будет вызываться без аргументы, и он должен возвращать либо строка или кортеж.
__reduce__()
С другой стороны,
Иногда полезно знать версия протокола при реализации __reduce__. Это может быть сделано реализация метода с именем __reduce_ex__ вместо __reduce__. __reduce_ex__, когда это существует, называется в предпочтении над __reduce__ (вы все еще можете предоставить __reduce__ назад совместимость). __reduce_ex__ метод будет вызываться с одним целочисленный аргумент, протокол версия.
__reduce__
__reduce_ex__
На захватной руке Гвидо говорит , что это область, которую можно очистить.
__reduce_ex__ - это то, что __reduce__ должно было быть, но никогда не было. __reduce_ex__ работает как __reduce__, но протокол рассола пройден.