'This basically means:
* The constructor for this Class is self.__class__
* The parameters for that constructor are:
- A vulnerability
- None: replacing the ExtendedUrllib we don\'t want to pickle
- None: replacing the Pool we don\'t want to pickle
When unpickling cPickle will create the Shell using:
Shell(vuln, None, None)
So, the UI has the responsibility to assign a ExtendedUrllib and a
Pool to the Shell before it is used again.'

def __reduce__(self):

    class_name = self.__class__.__name__
    if (class_name != 'Shell'):
        msg = 'You    need    to    implement    __reduce__    for    the    Shell    subclass    "%s".    See    #2181    for    more    details.'
        raise NotImplementedError((msg % class_name))
    return (self.__class__, (self._vuln, None, None))
