This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author july
Recipients docs@python, july
Date 2016-07-27.17:07:25
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <>
A note just below object.__setstate__() documentation
says that
… the type should implement __getnewargs__() or __getnewargs_ex__() to establish such an invariant; otherwise, neither __new__() nor __init__() will be called.

I believe that note about not calling __new__() was relevant in python2. I could not find case in python3 in which __new__() would not be called. And __init__() is not called anyway, as far as I understand (unless explicitly by __setstate__() or something).

Python 3.6.0a3+ (default:da9898e7e90d, Jul 27 2016, 19:51:12) 
[GCC 4.9.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> class C:
...   def __getstate__(self): return {'foo' :}
...   def __setstate__(self, state): = state['foo']
...   def __new__(cls):
...     print('__new__ is called'); return super().__new__(cls)
...   def __init__(self):
...     print('__init__ is called'); = None; super().__init__()
>>> c = C(); = 'bar'
__new__ is called
__init__ is called
>>> import pickle
>>> c2 = pickle.loads(pickle.dumps(c))
__new__ is called
Date User Action Args
2016-07-27 17:07:25julysetrecipients: + july, docs@python
2016-07-27 17:07:25julysetmessageid: <>
2016-07-27 17:07:25julylinkissue27635 messages
2016-07-27 17:07:25julycreate