Skip to content

Unable to serialize function that instantiates a subclass #99

Description

@acommendador

Using 0.3.1 the following code

import cloudpickle

class Base:
    def __init__(self, field1):
        self.field1 = field1

class Child(Base):
    def __init__(self, field2, field1):
        super().__init__(field1)
        self.field2 = field2

def test_function():
    _ = Child('field-2-value', 'field-1-value')

_ = cloudpickle.dumps(test_function)

results in stacktrace:

Traceback (most recent call last):
  File "<removed path>/experiment_cloudpickle.py", line 18, in <module>
    _ = cloudpickle.dumps(test_function)
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 829, in dumps
    cp.dump(obj)
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 233, in dump
    return Pickler.dump(self, obj)
  File <removed path>\Continuum\Miniconda3\lib\pickle.py", line 408, in dump
    self.save(obj)
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 354, in save_function
    self.save_function_tuple(obj)
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 436, in save_function_tuple
    save(f_globals)
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 814, in save_dict
    self._batch_setitems(obj.items())
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 845, in _batch_setitems
    save(v)
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 548, in save_global
    self.save_reduce(typ, (obj.__name__, obj.__bases__, d), obj=obj)
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 713, in save_reduce
    self.memoize(obj)
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 429, in memoize
    assert id(obj) not in self.memo
AssertionError

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions