В чем разница между __reduce__ и __reduce_ex__? - PullRequest
14 голосов
/ 29 сентября 2008

Я понимаю, что эти методы предназначены для травления / расщепления и не имеют отношения к встроенной функции уменьшения, но в чем разница между двумя и зачем нам оба?

Ответы [ 2 ]

24 голосов
/ 29 сентября 2008

Документы говорят, что

Если предусмотрено, во время травления __reduce__() будет вызываться без аргументы, и он должен возвращать либо строка или кортеж.

С другой стороны,

Иногда полезно знать версия протокола при реализации __reduce__. Это может быть сделано реализация метода с именем __reduce_ex__ вместо __reduce__. __reduce_ex__, когда это существует, называется в предпочтении над __reduce__ (вы все еще можете предоставить __reduce__ назад совместимость). __reduce_ex__ метод будет вызываться с одним целочисленный аргумент, протокол версия.

На захватной руке Гвидо говорит , что это область, которую можно очистить.

5 голосов
/ 29 сентября 2008

__reduce_ex__ - это то, что __reduce__ должно было быть, но никогда не было. __reduce_ex__ работает как __reduce__, но протокол рассола пройден.

...